我尝试创建新目录并设置其权限(最多使用c ++ 11而不使用boost),以便用户,组和其他人可以列出其中的文件并读取并写入新文件( linux 环境)。
#include <sys/stat.h>
#include <sys/types.h>
int main(void) {
const char* path = "/tmp/newDir";
mode_t process_mask = umask(0);
int syscall_status = mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO);
umask(process_mask);
return syscall_status;
}
此代码基于mkdir(和umask)的man(2)页面。
但是,创建的目录具有rwxr-xr-x
权限(不写组和其他权限)。
我也尝试在目录上使用chmod syscall,但无法解决问题。 stackoverflow中的其他来源处理了文件(而不是文件夹),并且尝试在我的目录上应用文件方法也无法正常工作。
此外,我想避免从stdlib调用system(),如果找不到解决方案(出于安全考虑),这是我要使用的最后一个选项。
答案 0 :(得分:1)
char* path = "/tmp/newDir";
除语法错误外,此错误自C ++ 11起也是错误的。在此之前,这将使用不建议使用的转换。字符串文字在C ++中是const->使用指向const的指针。
除此之外,该程序在POSIX系统下是正确的。如果失败,则可以检查errno
以了解原因。如果您没有获得所有权限:检查父目录是否具有默认ACL;否则,请执行以下操作:将会覆盖umask。
在C ++中创建目录的可移植方式是std::filesystem::create_directory
,而设置权限的方式是std::filesystem::permissions
。