linux 文件操作函数 mount-mknod-mkdir
1. mount/unmount 函数功能描述mount 挂载文件系统,unmount 则执行相反的操作头文件#include <sys/mount.h>#include <errno.h> // 用于 errno 的判断用法int mount(const char *source, const char *t
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_IFMT | type of file 文件类型掩码 |
S_IFREG | regular 普通文件 |
S_IFBLK | block special 块设备文件 |
S_IFDIR | directory 目录文件 |
S_IFCHR | character special 字符设备文件 |
S_IFIFO | fifo 管道文件 |
S_IFNAM | special named file 特殊文件 |
S_IFLNK | symbolic 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 查看
更多推荐
所有评论(0)