文件元属性中st_mode详解

一、 文件元数据

操作系统中, 有关文件的大部分属性存放在磁盘中的i节点, 其余的文件信息i节点编号和文件名称存放在其父目录的目录项中;
可以使用系统调用stat或是lstat得到一个文件的所有属性,这两个函数返回的是一个struct stat的数据结构。本文主要讲解关于struct stat数据结构的第一个字段st_mode的介绍。st_mode中有关于文件类型和文件访问访问权限的信息, st_mode是16位;

二、 st_mode的介绍

15-12位:使用这4各位表示7种文件类型
11-9位:设置用户ID位, 设置组ID位, 文件粘住位
8-6位:关于其他用户的权限
5-3位:关于组的访问权限
2-0位:关于用户的访问权限
头文件中使用8进制表示, 具体位的情况在头文件定义如下:

//文件类型
S_IFMT 		0170000
S_IFSOCK	0140000
S_IFLNK		0120000
S_IFREG		0100000
S_IFBLK 	0060000
S_IFDIR		0040000
S_IFCHR 	0020000
S_IFIFO		0010000
//设置用户ID, 设置组ID, 文件粘住位
S_ISUID		0004000
S_ISGID		0002000
S_ISVIX		0001000
//用户访问权限
S_IRWXU		00700
S_IRUSR		00400
S_IWUSR		00200
S_IXUSR		00100
//组访问权限
S_IRWXG		00070
S_IRGRP		00040
S_IWGRP		00020
S_IXGRP		00010
//其他用户访问权限
S_IRWXO		00007
S_IROTH		00004
S_IWOTH		00002
S_IXOTH		00001

三、判断文件类型的宏

下面函数是使用宏实现的, 判断文件类型, 函数返回真假以表明是否属于这种文件类型;

S_ISLNK(stat.st_mode);
S_ISREG(stat.st_mode);
S_ISDIR(stat.st_mode);
S_ISCHR(stat.st_mode);
S_ISBLK(stat.st_mode);
S_ISFIFO(stat.st_mode);
S_ISSOCk(stat.st_mode);

你可能感兴趣的:(文件元属性中st_mode详解)