我正在为uni开发一个项目,我们必须将一个或多个目录的内容合并到一个输出目录中,并且我的项目似乎工作得很好,除了输出目录中输出的文件没有读或写访问权限,我可以手动更改它,但我假设这不是所需的解决方案,我对 c 和 OSX 相当陌生,所以这可能是一个非常简单的修复,
我目前使用 0777 作为 mkdir 函数的 mode_t 参数 并使用 O_RDWR 打开所有文件。
最佳答案
int dest= open(file_name, O_CREAT|O_RDRW)
行是错误的。
当您指定 O_CREAT 作为标志时,open () 希望您提供第三个参数,即权限位。
这意味着您必须执行以下操作: int dest= open(file_name, O_CREAT|O_RDRW, 0755);
。由于您正在复制文件,因此您可以使用 stat 读取该文件的现有权限。 () ,并在打开和创建目标文件时提供相同的权限。
另请记住,创建新文件时的文件权限位受 umask 的影响。 ,如果您复制现有的权限位,您可能需要在复制文件之前调用 umask(0);
,这样您始终获得与原始文件相同的权限。
关于c - 合并目录上的文件没有读/写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13117298/