zoukankan      html  css  js  c++  java
  • 系统编程概念(文件系统mount等函数的使用)

    挂载文件系统

    #include<sys/mount.h>
    int mount(const char *source,const char *target,const char *fstype,unsigned long mountflags,const void *data)

    其中mountflags的值可为:
    MS_BIND 建立绑定挂载,会忽略fstype,data参数
    MS_DIRSYNC 同步更新路径,注意只正对路径
    MS_MANDLOCK 允许对该文件系统中的文件强行锁定记录
    MS_MOVE 令整个动作为一原子操作,不可分割
    MS_NOATIME 不更新最后访问时间(使用该标志意在消除额外的磁盘访问,避免每次访问时都更新文件i节点,可提高性能)
    MS_NODEV 不允许访问此文件系统上的块设备和字符设备
    MS_NODIRATIME 不更新目录的最后访问时间
    MS_NOEXEC 不允许在此文件系统上执行程序或脚本
    MS_NOSUID 禁用set-user-ID和set-group-ID
    MS_RDONLY 以只读方式挂载文件系统,在此文件系统上不能创建和修改文件
    MS_REC
    MS_RELATIME 只有当文件最后访问时间戳的当前值(上次更新时间)小于或等于最后一次修改或状态更新的时间戳时,才对其进行更新
    MS_REMOUNT 针对已经挂载的文件系统,可以改变其mountflag和data
    MS_STRICTATIME 只要访问文件,就总是更新文件的最后访问时间戳
    MS_SYNCHRONOUS 对文件系统上的所有文件和目录保持同步更新
    下面我们来看一下使用mount函数的程序

    #include<stdlib.h>
    #include<string.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<error.h>
    #include<sys/mount.h>
    int main(int argc,char *argv[])
    {
        unsigned long flags;
        char *data,*fstype;
        int j,opt;
        flags=0;
        data=NULL;
        fstype=NULL;
        while((opt=getopt(argc,argv,"o:t:f:"))!=-1)//getopt是获取argc和argv选项的函数,“o:t:f:”代表选项名称为-o,-t,-f,opt用来记录选项的名字,
        {
            switch(opt)
            {
                case 'o':
                    data=optarg;
                    break;
                case 't':
                    fstype=optarg;
                    break;
                case 'f':
                    for(j=0;j<strlen(optarg);j++)
                    {
                        switch(optarg[j])//逐个读取每个选项参数的内容
                        {
                            case 'b':flags|=MS_BIND;    break;
                            case 'd':flags|=MS_DIRSYNC; break;
                            case 'l':flags|=MS_MANDLOCK;    break;
                            case 'm':flags|=MS_MOVE;    break;
                            case 'A':flags|=MS_NOATIME; break;
                            case 'V':flags|=MS_NODEV;   break;
                            case 'D':flags|=MS_NODIRATIME;  break;
                            case 'E':flags|=MS_NOEXEC;  break;
                            case 'S':flags|=MS_NOSUID;  break;
                            case 'r':flags|=MS_RDONLY;  break;
                            case 'c':flags|=MS_REC; break;
                            case 'R':flags|=MS_REMOUNT; break;
                            case 's':flags|=MS_SYNCHRONOUS;break;
                        }
                    }
                    break;
            }
        }
        if(argc!=optind+2)//因为需要后面两个目标文件和源文件
        {
            perror("arguments wrong");
            exit(1);
        }
        if(mount(argv[optind],argv[optind+1],fstype,flags,data)==-1)//使用函数不,argv[optind]是目标文件,argv[optind+1]是源文件
            perror("mount error");
        return 0;
    }

    卸载文件系统:umount()和umount2()

    #include<sys/mount.h>
    int umount(const char *target)      //target为文件系统挂载点,成功返回0,失败返回-1
    int umount2(const char *target,int flags)   //成功返回0,失败返回-1,flags可为MNT_DETACH(让已挂载点的进程继续使用,同时禁止新的进程访问该挂载点,当所有进程不再使用访问点时,系统会卸载相应文件系统),MNT_EXPIRE(令挂载点到期),MNT_FORCE(即使文件系统扔处于在用状态,依然强行卸载),UMOUNT_NOFLOLLOW

    获取与文件系统有关的信息

    #include<sys/statvfa.h>
    int statvfs(const char *pathname,struct statvfs *statvfsbuf);
    int fstatvfs(int fd,struct statvfs *statvfsbuf)     //成功返回0,失败-1

    这里写图片描述

  • 相关阅读:
    美国诚实签经验——必带材料:护照,证件照,DS160确认页,面试预约确认页,+境外照片
    美国诚实签经验——医院预约单和医院资料,医生预约收据和报价表,赴美预算,赴美行程,保险是加分项,工作证明(勾出职位和薪酬),附上名片或者工卡,全家福照片
    php MySQLi部分函数(面向对象和过程)
    php calling scope
    mysqli_set_charset和SET NAMES优劣分析
    php 父类子类构造函数注意事项
    Dreamweaver显示花括号匹配
    php 父类调用子类方法和成员
    PHP 重载 __call() _callStatic方法
    转:Linus:利用二级指针删除单向链表
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730619.html
Copyright © 2011-2022 走看看