我有关于位操作和权限的以下教程问题,我不太明白。特别是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
答案 0 :(得分:0)
特别是B,因为我理解它>> 3操作数是3个空格的位移,但这会导致全部为零的类型保护... | 0000400 | >> 3 00000000 | 4 ...?
>> 3
是3 位的位移,而不是3位数。在八进制表示中,每个数字对应3位(8 = 2 3 ),因此3位的位移将对应于八位表示的1位移位。
因此,八进制00004000 >> 3 = 00000400
。