刚开始学习一些基本的 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