如何从c中的stat()获取八进制chmod格式

use*_*257 4 c

我需要知道如何以八进制格式获取文件权限并将其保存到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.

ili*_*ias 8

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)

资源:

  1. 更多关于格式标识符
  2. 相关常数