繁体   English   中英

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

[英]How do I print file permissions as a string?

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

rw-r--r-- (0644)

但是我得到的是

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

如何获得正确的权限? 我曾尝试使用Google搜索,但不了解自己在做什么错。 这是我的代码:

    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);

请注意,在按位检查(打印r,w和x的位置)中,仅打印您感兴趣的权限。使用%d打印权限时,将打印所有权限。 也尝试检查S_IFREG。 您将在开始时看到它导致“意外” 100。 在权限字段中,此位设置为存储此文件为“常规”文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM