权限位操作查询

时间:2016-11-11 04:56:02

标签: bit-manipulation

我有关于位操作和权限的以下教程问题,我不太明白。特别是B,据我了解>> 3操作数是3个空格的位移,但这会导致全部为零的类型保护... | 0000400 | >> 3 00000000 | 4 ...?

// File types
#define S_IFDIR (0040000)      // Directory
#define S_IFREG (0100000)      // Regular file
#define S_IFLNK (0120000)      // Symbolic link
// Protection bits
#define S_IRUSR (0000400)       // Read by owner
#define S_IWUSR (0000200)       // Write by owner
#define S_IXUSR (0000100)       // Execute by owner
#define S_IRGRP (S_IRUSR >> 3)  // Read by group
#define S_IWGRP (S_IWUSR >> 3)  // Write by group
#define S_IXGRP (S_IXUSR >> 3)  // Execute by group
#define S_IROTH (S_IRGRP >> 3)  // Read by others
#define S_IWOTH (S_IWGRP >> 3)  // Write by others
#define S_IXOTH (S_IXGRP >> 3)  // Execute by others

请注意,上面的常量是八进制,而不是十进制或十六进制。

对于以下每种情况,请给出一个能够捕获相关权限的位串的八进制表示:

一个。一个只对其所有者可读和可写的常规文件

湾一个可写入其所有者的常规文件,但所有者/组/任何人都可以读取

℃。一个只能由所有者/组/任何人执行的常规文件

d。只有所有者可以读取,创建文件或输入

的目录

即只有所有者可以创建文件的目录,但任何人都可以读取/输入

F。所有者/组/任何人可以读取,创建文件或输入

的目录

答案:

一个。 0100600

湾0100644

℃。 0100111

d。 0040700

即0040755

F。 0040777

1 个答案:

答案 0 :(得分:0)

  

特别是B,因为我理解它>> 3操作数是3个空格的位移,但这会导致全部为零的类型保护... | 0000400 | >> 3 00000000 | 4 ...?

>> 3是3 的位移,而不是3位数。在八进制表示中,每个数字对应3位(8 = 2 3 ),因此3位的位移将对应于八位表示的1位移位。

因此,八进制00004000 >> 3 = 00000400