挂载文件系统

  1. #include<sys/mount.h>
  2. 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函数的程序

  1. #include<stdlib.h>
  2. #include<string.h>
  3. #include<stdio.h>
  4. #include<unistd.h>
  5. #include<error.h>
  6. #include<sys/mount.h>
  7. int main(int argc,char *argv[])
  8. {
  9. unsigned long flags;
  10. char *data,*fstype;
  11. int j,opt;
  12. flags=0;
  13. data=NULL;
  14. fstype=NULL;
  15. while((opt=getopt(argc,argv,"o:t:f:"))!=-1)//getopt是获取argc和argv选项的函数,“o:t:f:”代表选项名称为-o,-t,-f,opt用来记录选项的名字,
  16. {
  17. switch(opt)
  18. {
  19. case 'o':
  20. data=optarg;
  21. break;
  22. case 't':
  23. fstype=optarg;
  24. break;
  25. case 'f':
  26. for(j=0;j<strlen(optarg);j++)
  27. {
  28. switch(optarg[j])//逐个读取每个选项参数的内容
  29. {
  30. case 'b':flags|=MS_BIND; break;
  31. case 'd':flags|=MS_DIRSYNC; break;
  32. case 'l':flags|=MS_MANDLOCK; break;
  33. case 'm':flags|=MS_MOVE; break;
  34. case 'A':flags|=MS_NOATIME; break;
  35. case 'V':flags|=MS_NODEV; break;
  36. case 'D':flags|=MS_NODIRATIME; break;
  37. case 'E':flags|=MS_NOEXEC; break;
  38. case 'S':flags|=MS_NOSUID; break;
  39. case 'r':flags|=MS_RDONLY; break;
  40. case 'c':flags|=MS_REC; break;
  41. case 'R':flags|=MS_REMOUNT; break;
  42. case 's':flags|=MS_SYNCHRONOUS;break;
  43. }
  44. }
  45. break;
  46. }
  47. }
  48. if(argc!=optind+2)//因为需要后面两个目标文件和源文件
  49. {
  50. perror("arguments wrong");
  51. exit(1);
  52. }
  53. if(mount(argv[optind],argv[optind+1],fstype,flags,data)==-1)//使用函数不,argv[optind]是目标文件,argv[optind+1]是源文件
  54. perror("mount error");
  55. return 0;
  56. }

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

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

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

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

系统编程概念(文件系统mount等函数的使用)的更多相关文章

  1. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  2. linux系统编程:setjmp和longjmp函数用法

    #include <stdio.h> #include <setjmp.h> //jmp_buf:数组,保存栈信息即运行环境 jmp_buf buf; double Divid ...

  3. linux系统编程之错误处理:perror,strerror和errno

    1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述. errno这个全局变量在<errno.h>头文件中声明如下:extern int errno; errno是 ...

  4. Linux/Unix系统编程手册 第二章:基本概念

    本章预热与后续系统编程有关的概念. 术语“操作系统”通常包含2种含义:一是指完整的软件包,包括管理计算机资源的核心组件,已经附带的标准软件:二是独指管理硬件的内核. 内核具有诸多概功能,包括: 进程管 ...

  5. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...

  6. Linux 系统编程 学习:01-进程的有关概念 与 创建、回收

    Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...

  7. Linux 系统编程 学习:06-基于socket的网络编程1:有关概念

    Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...

  8. Linux系统编程-setitimer函数

    功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, cons ...

  9. 05-Linux系统编程-第02天(文件系统、目录操作、dup2)

    1 课程回顾 02-文件存储 文件名不在inode里 而是保存在一个叫dentry的结构体里了 格式化就是指定一组规则 指定对文件的存储及读取的一般方法 linux下主要使用 ext2 ext3 ex ...

随机推荐

  1. SpringCloud调用服务示例

    SpringCloud調用服務示例. SpringCloud简介: Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务 ...

  2. asp.net MVC之Result过滤器浅析

    在asp.net MVC中,每一个Action方法完成之后都会返回一个结果,而我们可以在Result过滤器中根据需要修改这个结果.例如可以根据UserAgent来判断客户端的来源是手机还是PC端,从而 ...

  3. [Leetcode 135]糖果分配 Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  4. 5.7 C++函数调用操作符重载

    参考:http://www.weixueyuan.net/view/6385.html 总结: 需要以类成员函数的形式对函数调用操作符“()”进行重载. 只有常成员函数才能处理常对象,故我们依然在类中 ...

  5. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

  6. 开发框架DevExtreme发布v18.2.4|附下载

    DevExtreme Complete Subscription是性能最优的 HTML5,CSS 和 JavaScript 移动.Web开发框架,可以直接在Visual Studio集成开发环境,构建 ...

  7. linux 常用重启

    sudo reboot 为最常用重启 Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot 普通重启 2.shutdown -r now 立刻重启(r ...

  8. ssh 免密登陆

    A 要免密码登录要B 那么需要在A电脑上使用命令 ssh-keygen -t rsa 在~/.ssh/ 目录下生成id_rsa.pub 这个文件,然后将这个文件的内容拷到B电脑de ~/.ssh/au ...

  9. 浅谈如何正确给table加边框

    一般来说,给表格加边框都会出现不同的问题,以下是给表格加边框后展现比较好的方式 <style> table,table tr th, table tr td { border:1px so ...

  10. php优秀框架codeigniter学习系列——constants.php

    该文件位于application/config/constants.php.