gpt4 book ai didi

c - 如何将文件权限打印为字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:53 25 4
gpt4 key购买 nike

我有一个 mode_t perms 变量,它存储从另一个函数返回的文件的权限。我需要将文件权限打印为

形式的字符串
rw-r--r-- (0644)

但我得到的是

r--r--r-- (100644)

如何获得正确的权限?我试过谷歌搜索但不明白我做错了什么。这是我的代码:

    void print_perms(mode_t perms)
{
printf( (perms & S_IRUSR) ? "r" : "-");
printf( (perms & S_IWUSR) ? "w" : "-");
printf( (perms & S_IXUSR) ? "x" : "-");
printf( (perms & S_IRGRP) ? "r" : "-");
printf( (perms & S_IWGRP) ? "w" : "-");
printf( (perms & S_IXGRP) ? "x" : "-");
printf( (perms & S_IROTH) ? "r" : "-");
printf( (perms & S_IWOTH) ? "w" : "-");
printf( (perms & S_IXOTH) ? "x" : "-");
}
//later
print_perms(permissions);
printf(" (%d)\n", permissions);

最佳答案

首先,UNIX文件权限习惯上用八进制表示,对应的格式字符串是“%o”,而不是“%d”。 rw-r--r-- 实际上是0644,但是在C语言中是0644 == 420,例如(后者是十进制)

其次,使用的位数多于代码中指定的 9 个。你实际上应该说类似的话

printf(" (%3o)", perms&0777);

关于c - 如何将文件权限打印为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26616038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com