[英]What does & mean in fileStat.st_mode & S_IRUSR
我正在尝试使用C
stat
函数调用打印Linux
中文件的权限。 我在网上找到了一些有用的代码,其中包含这些段
printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-");
printf( (fileStat.st_mode & S_IWUSR) ? "w" : "-");
代码运行完美,但谁能解释一下&
在这里是什么意思?
第一行
printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-");
如果有读取权限(S_IRUSR),则打印r
否则打印-
。
为了防止格式字符串攻击( https://en.wikipedia.org/wiki/Uncontrolled_format_string ),您应该编写:
printf("%c", (fileStat.st_mode & S_IRUSR) ? 'r' : '-');
第二行
printf( (fileStat.st_mode & S_IWUSR) ? "w" : "-");
如果有写权限(S_IWUSR),则打印w
否则打印-
。 同样,为了防止格式字符串攻击,您应该编写:
printf( "%c", (fileStat.st_mode & S_IWUSR) ? 'w' : '-');
&
是按位和运算符。 在这种情况下,它用于检查是否设置了位域。 一个变量x
可以被设置为,比如说, A | B | C
A | B | C
A | B | C
要检查C
位是否打开,请写入
if (x & C)
// the bit has been set
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.