挂载文件系统

#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

最新文章

  1. AnyImgUpload
  2. 那些过目不忘的H5页面
  3. SQL中判断一串字符中是否有特定的字符
  4. 自定义shape文件
  5. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
  6. 【HTML5】使用多媒体
  7. 修改pip源
  8. python global vs nonlocal (2)
  9. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒
  10. I.MX6 U-boot GPIO hacking
  11. MySQL can’t specify target table for update in FROM clause
  12. 用java写bp神经网络(二)
  13. 在Visual Studio中使用AStyle
  14. ShellExecuteEx的使用方法
  15. Android报错:WindowManager$BadTokenException: Unable to add window -- window has already been added
  16. Mysql基本命令二
  17. NYOJ街区最短路径问题
  18. c/c++再学习:查找算法了解
  19. DPI技术简介
  20. 利用PHP扩展Taint找出网站的潜在安全漏洞实践

热门文章

  1. Java 如何抛出异常、自定义异常
  2. AngularJS输出helloworld
  3. activemq spring 集成与测试
  4. 程序包需要 NuGet 客户端版本“XXXXX”或更高版本,但当前的 NuGet 版本为“XXXXXXXXXX”
  5. Python数据分析库pandas基本操作
  6. python day05--字典
  7. HDU 1213 How Many Tables(并查集裸题)
  8. Spring REST API
  9. Enhancement in SAP abap.
  10. SQL注入之Sqli-labs系列第十三关(基于单引号POST的报错注入)