2 大家一定注意到了,在上面列举域的时候,我在st_mode处使用了黑体橘红色标识,原因在于这个域不像其他域那么容易使用,其他的域的值显而易见,而st_mode域是需要一些宏予以配合才能使用的。其实,通俗说,这些宏就是一些特定位置为1的二进制数的外号,我们使用它们和st_mode进行”&”操作,从而就可以得到某些特定的信息。 文件类型标志包括: S_IFBLK:文件是一个特殊的块设备 S_IFDIR:文件是一个目录 S_IFCHR:文件是一个特殊的字符设备 S_IFIFO:文件是一个FIFO设备 S_IFREG:文件是一个普通文件(REG即使regular啦) S_IFLNK:文件是一个符号链接 其他模式标志包括: S_ISUID:文件设置了SUID位 S_ISGID:文件设置了SGID位 S_ISVTX:文件设置了sticky位 用于解释st_mode标志的掩码包括: S_IFMT:文件类型 S_IRWXU:属主的读/写/执行权限,可以分成S_IXUSR, S_IRUSR, S_IWUSR S_IRWXG:属组的读/写/执行权限,可以分成S_IXGRP, S_IRGRP, S_IWGRP S_IRWXO:其他用户的读/写/执行权限,可以分为S_IXOTH, S_IROTH, S_IWOTH 还有一些用于帮助确定文件类型的宏定义,这些和上面的宏不一样,这些是带有参数的宏,类似与函数的使用方法: S_ISBLK:测试是否是特殊的块设备文件 S_ISCHR:测试是否是特殊的字符设备文件 S_ISDIR:测试是否是目录(我估计find . -type d的源代码实现中就用到了这个宏) S_ISFIFO:测试是否是FIFO设备 S_ISREG:测试是否是普通文件 S_ISLNK:测试是否是符号链接 S_ISSOCK:测试是否是socket |