【发布时间】:2019-09-24 13:04:06
【问题描述】:
我尝试创建新目录并设置其权限(最多使用 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(),如果我找不到解决方案,这是我将使用的最后一个选项(安全考虑)。
【问题讨论】:
-
我强烈推荐 Boost.Filesystem。或者,如果你有 C++17,
<filesystem> -
您以什么权限级别运行程序?
-
@AndyG 我不能使用 boost 和 c++11 编译(不能更新)。
-
@ryyker 用户级别,并且我对父目录 /tmp/ 有 rwx 权限
-
@RonU:我对您的 C++ 版本表示同情 :-)。总体而言,无法使用 Boost 并不是最糟糕的事情。无论如何,它往往会潜入您的代码库并膨胀您的标题。