Linux C:"S_Ixxxx"权限标志的"S"和"I"实际上意味着什么?



在 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_IRWXUS_IRUSR)相关的宏也未定义。 这些是在大约十年后由POSIX添加的。 使用八进制常数被认为足够(且有效)。 如果需要符号权限,值S_IREAD等效于S_IRUSRS_IWRITE等效于S_IWUSRS_IEXEC等效于S_IXUSR,并且简单的右移3或6位会给组或其他权限位。

但是,S_I前缀是统一的,POSIX保持了这种一致性,因为它添加了符号链接和(Unix域)套接字等以及额外的测试宏。

S 可能

用于统计,我可能用于 inode。所有这些权限标志都保存在索引节点数据结构中。有关 inode 的更多详细信息,您可以在维基百科上阅读 inode

相关内容

最新更新