【发布时间】:2012-05-15 23:32:16
【问题描述】:
刚开始学习一些基本的 C 语言并在 Linux 上使用 stat() 系统调用。
所以st_mode 从 stat() 返回的结构中是一个位域。我可以通过简单的printf("octal %o", st.st_mode) 获得八进制权限,但我只对位域中的某些标志感兴趣,即S_IRWXU, S_IRWXG and S_IRWXO 将该值发送到另一个函数,例如:mkdir。
这是我的示例程序。
忽略这个事实,这是一个带有硬编码目录的垃圾程序,没有作为参数传递给 create_dir() 函数,也没有错误检查。
#include <stdio.h>
#include <sys/stat.h>
static int create_dir(mode_t mode) {
mkdir("/home/user/blahnew", mode);
}
main() {
struct stat st;
int res;
res = stat("/home/user/blah", &st);
printf("user %o\n", st.st_mode & S_IRWXU);
printf("group %o\n", st.st_mode & S_IRWXG);
printf("other %o\n", st.st_mode & S_IRWXO);
create_dir(mode);
return 0;
}
如何在 st.st_mode 中仅获取上述标志并将其作为八进制传递给 create_dir() 以供 mkdir() 函数使用?
如果我只是做了create_dir(st.st_mode),那不会也传递mkdir() 不需要的所有其他标志...uid、gid、sticky bit 等?
干杯,B
【问题讨论】: