如何更改文件权限的格式?

时间:2012-04-12 20:29:18

标签: c permissions formatting format ls

好吧,我正在做C和我的程序,我有一个问题。我必须使用以下格式显示文件权限:

drwxr-xr-x

但我将权限作为int获取,因为这会将此值返回为int:

lstat(file->d_name, &info);
printf("%d \n", info.st_mode);

这显示例如:$ 33188

如何将int权限转换为drwxr-xr-x

非常感谢。

问候。

3 个答案:

答案 0 :(得分:3)

文件的模式是权限和文件类型字段的位集。这些标志在man stat.h中定义。

您可以从以下模式中提取信息:

switch(mode & S_IFMT) {
  case S_IFDIR:
    mode_text[0] = 'd';
    break;
  /* add other possibilities here */
  default:
    mode_text[0] = '-';
}
mode_text[1]= (mode & S_IRUSR) ? 'r' : '-';
mode_text[2]= (mode & S_IWUSR) ? 'w' : '-';
/* the third one is special; can indicates setuid as well */
mode_text[3]= (mode & S_IXUSR) ? (mode & S_ISUID) ? 's' : 'x' : '-';

等。对于团体,其他人。

答案 1 :(得分:2)

chmod的文档描述了两者之间的关系。

答案 2 :(得分:0)

info coreutils ls文档告诉您ls如何决定如何翻译st_mode文件模式位。但是,对于ls的基本实现,您可以依次检查每个适当的位并输出相应的字母(如果已设置)或-(如果不是)。