我想用stat
函数调用C
来打印Linux
中文件的权限。而且我发现一些有用的代码在网上它有段在fileStat.st_mode&S_IRUSR中有什么意思
printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");
代码工作完美,但任何人都可以解释我是什么的&
这里的意思?
我想用stat
函数调用C
来打印Linux
中文件的权限。而且我发现一些有用的代码在网上它有段在fileStat.st_mode&S_IRUSR中有什么意思
printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");
代码工作完美,但任何人都可以解释我是什么的&
这里的意思?
第一行
printf((fileStat.st_mode & S_IRUSR) ? "r" : "-");
这将打印一个r
如果有读权限(S_IRUSR)和-
否则。
为了防止对格式化字符串攻击(https://en.wikipedia.org/wiki/Uncontrolled_format_string),你应该写:
printf("%c", (fileStat.st_mode & S_IRUSR) ? 'r' : '-');
第二行
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-");
此打印w
是否有写权限(S_IWUSR)和-
。 再次,以防止格式化字符串攻击,你应该写:
printf("%c", (fileStat.st_mode & S_IWUSR) ? 'w' : '-');
&
是按位与操作。在这种情况下,它用于检查是否设置了位域。变量x
可能已被设置为,例如A | B | C
。要检查C
位,则写入
if (x & C)
// the bit has been set
这是按位与操作 – alain
谢谢!我是C的新手。 –