使用C ++设置目录权限

时间:2019-09-24 13:04:06

标签: c++ linux

我尝试创建新目录并设置其权限(最多使用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(),如果找不到解决方案(出于安全考虑),这是我要使用的最后一个选项。

1 个答案:

答案 0 :(得分:1)

char* path = "/tmp/newDir";

除语法错误外,此错误自C ++ 11起也是错误的。在此之前,这将使用不建议使用的转换。字符串文字在C ++中是const->使用指向const的指针。

除此之外,该程序在POSIX系统下是正确的。如果失败,则可以检查errno以了解原因。如果您没有获得所有权限:检查父目录是否具有默认ACL;否则,请执行以下操作:将会覆盖umask。

在C ++中创建目录的可移植方式是std::filesystem::create_directory,而设置权限的方式是std::filesystem::permissions