在 Linux 上,人 2 打开,我得到了以下标志的解释:
S_IRWXU
00700 user (file owner) has read, write and execute permission
S_IRUSR
00400 user has read permission
S_IWUSR
00200 user has write permission
S_IXUSR
00100 user has execute permission
S_IRWXG
00070 group has read, write and execute permission...
我想知道"S_I"的前导字母实际上是什么意思,"S"是某个单词的缩写,"我"也是如此?
S
可能适用于stat()
。
在第 7 版 Unix(大约 1979 年)中,stat()
的文档包含以下信息:
#define S_IFMT 0170000 /* type of file */
#define S_IFDIR 0040000 /* directory */
#define S_IFCHR 0020000 /* character special */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFIFO 0010000 /* fifo */
#define S_ISUID 04000 /* set user id on execution */
#define S_ISGID 02000 /* set group id on execution */
#define S_ISVTX 01000 /* save swapped text even after use */
#define S_IREAD 00400 /* read permission, owner */
#define S_IWRITE 00200 /* write permission, owner */
#define S_IEXEC 00100 /* execute/search permission, owner */
测试宏(如 S_ISREG(mode)
)不存在;您必须使用 (sb->st_mode & S_IFMT) == S_IFREG
等表达式来测试常规文件。 与权限(如S_IRWXU
或S_IRUSR
)相关的宏也未定义。 这些是在大约十年后由POSIX添加的。 使用八进制常数被认为足够(且有效)。 如果需要符号权限,值S_IREAD
等效于S_IRUSR
,S_IWRITE
等效于S_IWUSR
,S_IEXEC
等效于S_IXUSR
,并且简单的右移3或6位会给组或其他权限位。
但是,S_I
前缀是统一的,POSIX保持了这种一致性,因为它添加了符号链接和(Unix域)套接字等以及额外的测试宏。
用于统计,我可能用于 inode。所有这些权限标志都保存在索引节点数据结构中。有关 inode 的更多详细信息,您可以在维基百科上阅读 inode