1. mount/unmount 函数

功能描述

mount 挂载文件系统,unmount 则执行相反的操作

头文件
#include <sys/mount.h>
#include <errno.h> // 用于 errno 的判断
用法
int mount(const char *source, const char *target,
    const char *filesystemtype, unsigned long mountflags, const void *data);

int umount(const char *target);

int umount2(const char *target, int flags);
参数
(1) source

将要挂载的文件系统,通常是一个设备名,andoird 中比较常用的有:

1. tmpfs 
= tmpfs 是一种临时文件系统,它会将所有的文件存储在虚拟内存中。
= 如果你将 tmpfs 文件系统卸载(或断电)后,那么其下的内容也不复存在。
= tmpfs 既可以使用 RAM,也可以使用交换分区,会根据你的实际需求而改变大小。
= tmpfs 文件系统的速度非常惊人,毕竟它是驻留在 RAM 中的,即使用了交换分区,性能仍然非常卓越。

2. devpts
= devpts 文件系统为伪终端提供了一个标准接口,它的标准挂接点是 /dev/pts。
= 只要 pty(虚拟终端) 的主复合设备 /dev/ptmx 被打开,就会在 /dev/pts 下动态的创建一个新的 pty(虚拟终端) 设备文件。

3. proc
= proc 文件系统是一个非常重要的虚拟文件系统,它可以看作是内核内部数据结构的接口。
= 通过它我们可以获得系统的信息,同时也能够在运行时修改特定的内核参数。

4. sysfs
= 与 proc 文件系统类似,sysfs文件系统也是一个不占有任何磁盘空间的虚拟文件系统。
= sysfs文件系统是Linux2.6内核引入的,它通常被挂接在/sys目录下。
= sysfs 文件系统把连接在系统上的设备和总线组织成为一个分级的文件,使得它们可以在用户空间存取

5. selinuxfs
= selinuxfs 是虚拟文件系统,通常挂载在 /sys/fs/selinux,用来存放 SELinux 安全策略文件。
(2) target

文件系统要挂载的最终目录

(3) filesystemtype

文件系统的类型,可以是 “ext2”、”ext3”、”msdos”、”proc”、”nfs”、”iso9660”、”vfat” …

(4) mountflags

指定文件系统的读写访问标志,可能值有以下:

参数含义
MS_BIND执行 bind 挂载,使文件或者子目录树在文件系统内的另一个点上可视
MS_DIRSYNC同步目录的更新
MS_MANDLOCK允许在文件上执行强制锁
MS_MOVE移动子目录树
MS_NOATIME不要更新文件上的访问时间
MS_NODEV不允许访问设备文件
MS_NODIRATIME不允许更新目录上的访问时间
MS_NOEXEC不允许在挂载的文件系统上执行程序
MS_NOSUID执行程序时,不遵照 set-user-ID 和 set-group-ID 位
MS_RDONLY指定文件系统为只读
MS_REMOUNT重新加载文件系统,这允许你改变现存文件系统的 mountflag 和数据
MS_SYNCHRONOUS同步文件的更新
MNT_FORCE强制卸载,即使文件系统处于忙状态
MNT_EXPIRE将挂载点标记为过时
(5) data

文件系统特有的参数

返回值说明

成功执行时,返回0。失败返回 -1

具体的 fail 内容可通过 errno 查看

2. mknod 函数

功能描述

mknod 函数用于创建各种类型的文件,包括普通文件、特殊文件以及设备文件。

因为普通文件可以使用 open 或 create 创建,FIFO 文件可以使用 pipe 函数创建,所以 mknod 函数主要用于设备文件的创建。

设备文件与普通文件的区别

设备文件是文件系统中代表设备的特殊文件。与普通的文件相比,设备文件在磁盘(或宿主文件系统所的在其它设备)上只占用一个索引节点,而没有任何用于存放数据的记录块与之相联系。当然,这是因为设备文件的目的并不在于存储和读取数据,而只在于为应用程序提供一条通向具体设备的途径,使应用程序可以跟具体设备建立起连接。

普通文件(以及某些特殊文件)可以通过系统调用 open 来创建,只要在调用参数中或上 O_CREAT 标志,就可以让open函数在目标文件不存在时先创建这个文件。当然也可通过调用 creat() 来直接创建文件,事实上 sys_creat() 就是通过 sys_open() 实现的。可是这两个系统调用都不能用来创建设备文件,因为设备文件的创建需要有一个参数来传递设备号,而 open 和 creat 函数都不包括这个参数。此时就是 mknod 函数存在的意义了。

头文件
#include sys/stat.h
#include <errno.h> // 用于 errno 的判断
用法
int mknod(const char* path, mode_t mode, dev_t dev)
参数
(1) path

设备所在目录

(2) mode

指定设备的类型和读写访问标志,可能的类型有:

参数类型含义
S_IFMTtype of file 文件类型掩码
S_IFREGregular 普通文件
S_IFBLKblock special 块设备文件
S_IFDIRdirectory 目录文件
S_IFCHRcharacter special 字符设备文件
S_IFIFOfifo 管道文件
S_IFNAMspecial named file 特殊文件
S_IFLNKsymbolic link 链接文件

(3) dev

dev 表示设备,由makedev(1, 9) 函数创建,9为主设备号、1为次设备号,如果是普通文件此项直接设置为 0 即可。

3. mkdir

功能描述

用于创建目录文件并设置目录的访问权限

头文件
#include <sys/stat.h> 
用法

int mkdir(const char *path, mode_t mode);

参数
(1) path

目录名

(2) mode

目录的设置访问权限,为 mote_t 类型,为以下多个可选值按位或组成:

- S_IRUSR       当前用户可读
- S_IWUSR       当前用户可写
- S_IXUSR       当前用户可执行
- S_IRGRP       用户组可读
- S_IWGRP       用户组可写
- S_IXGRP       用户组可执行
- S_IROTH       其他用户可读
- S_IWOTH       其他用户可写
- S_IXOTH       其他用户可执行
返回值说明

成功执行时,返回0。失败返回 -1

具体的 fail 内容可通过 errno 查看

Logo

更多推荐