我需要知道如何以八进制格式获取文件权限并将其保存到int.我试过这样的事情:
struct stat buf;
stat(filename, &buf);
int statchmod = buf.st_mode;
printf("chmod: %i\n", statchmod);
Run Code Online (Sandbox Code Playgroud)
但他的输出是:
chmod: 33279
Run Code Online (Sandbox Code Playgroud)
应该是777.
33279是八进制100777的十进制表示.您将获得十进制表示,因为您通过格式标识符请求将数字打印为小数%i
.%o
将它打印为八进制数.
但是,st_mode将为您提供更多信息.(因此100
在开始时.)您将要使用S_IRWXU
("用户"),S_IRWXG
(组)和S_IRWXO
(其他)常量的rwx信息来获取所有者,组和其他想法的权限.它们分别在700,070和007处定义,全部以八进制表示.或者将它们组合在一起并使用AND过滤掉指定的位将只产生您想要的数据.
最终的程序因此变成这样的:
struct stat buf;
stat(filename, &buf);
int statchmod = buf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
printf("chmod: %o\n", statchmod);
Run Code Online (Sandbox Code Playgroud)
资源: