我正在为 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);
在复制文件之前调用,因此您始终获得与原始文件相同的权限。