2015-11-19 49 views
-3

我想用stat函数调用C来打印Linux中文件的权限。而且我发现一些有用的代码在网上它有段在fileStat.st_mode&S_IRUSR中有什么意思

printf((fileStat.st_mode & S_IRUSR) ? "r" : "-"); 
printf((fileStat.st_mode & S_IWUSR) ? "w" : "-"); 

代码工作完美,但任何人都可以解释我是什么的&这里的意思?

+2

这是按位与操作 – alain

+0

谢谢!我是C的新手。 –

回答

0

第一行

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 
+0

你仍然没有解释OP的问题**是什么意思** – Michi

+0

修正@Michi [15个字符] – stackptr

+0

...你得到了我的投票:D。 – Michi