C / Unix:如何从st_mode中提取位?

时间:2016-02-13 01:49:04

标签: permissions filesystems kernel c

我是Unix编程和C的初学者,我对stat struc及其字段st_mode有两个问题:

  1. 如下所示访问st_mode字段时,返回的是哪种类型的数字(八进制,十进制等)?

    struct stat file;
    stat( someFilePath, &file);
    printf("%d", file.st_mode );
    
  2. 我认为数字是八进制的,但是当我运行此代码时,我得到了值33188。什么是基础?

    1. 我发现st_mode编码一个16位二进制数,表示文件类型和文件权限。如何从上面的输出中获取16位数字(特别是当它看起来不是八进制时)。 16位数字的哪些部分编码哪些信息?
    2. 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

mode_t背后的实际类型及其对信息的编码方式是实现定义的。唯一可以肯定的是它是一个位掩码。

要使用st_mode,请使用sys / stat.h标头中定义的标志和宏。有关这些定义的列表,请参阅:

man 2 stat

如果你真的需要知道每个位代表什么,或者只是好奇,请阅读标题或使用printf检查标志。