前面介绍的struct stat结构体中st_mode字段记录了文件的类型和文件的访问权限。因为Linux系统是由文件构成的,所以这里的文件权限适用于Linux系统所有的文件,包括目录、文件、设备、软连接等等,这里就不一一列举了。在这些权限中分为普通权限和特殊权限。
这里讲的普通权限就是前面的st_mode字段中所说的文件所有者权限、同组用户权限和其他用户权限,下面来回忆一下这些权限有什么内容:
| 文件权限 | 权限宏 | 含义 |
| 文件所有者权限(U) | S_IRUSR | 读权限(r) |
| S_IWUSR | 写权限(w) | |
| S_IXUSR | 执行权限(x) | |
| 同组用户权限(G) | S_IRGRP | 读权限(r) |
| S_IWGRP | 写权限(w) | |
| S_IXGRP | 执行权限(x) | |
| 其他用户权限(O) | S_IROTH | 读权限(r) |
| S_IWOTH | 写权限(w) | |
| S_IXOTH | 执行权限(x) |
知道了上面的内容以后先看一下系统中是如何对这些权限描述的。
| $ ls -l
total 36 -rwxr-xr-x 1 elf elf 16176 8月 22 16:30 chown_test -rw-r--r-- 1 elf elf 440 8月 22 16:30 chown_test.c -rwxr-xr-x 1 root root 16272 8月 22 16:28 lstat_test |
以chown_test为例,可以看到他前面的权限为-rwxr-xr-x,这里咱们先省略左边第一个“-”,从第二个开始每三个一组,分别对应的“rwx”文件所有者有读写执行权限、“r-x”同组用户有读和执行权限、“r-x”其他用户有读和执行权限。
下面说说左边第一个“-”是什么意思。
-:表示这是一个常规文件(普通文件),如文本文件、可执行文件等。
b:表示这是一个块设备文件,如硬盘、光驱等。
c:表示这是一个字符设备文件,如键盘、鼠标等。
l:表示这是一个符号链接(软连接)。
s:表示这是一个套接字文件(socket)。
p:表示这是一个管道文件(FIFO)
所以左边第一个“-”代表为可执行文件。
185