标签: c macos directory
我正在开发一个uni项目,我们必须将一个或多个目录的内容合并到一个输出目录中,我的项目看起来很完美,除了输出目录中输出的文件没有读写权限,我可以手动更改它但我假设这不是理想的解决方案,我对c和OSX相当新,所以它可能是一个非常简单的修复,
我目前正在使用0777作为我的mkdir函数的mode_t参数 并使用O_RDWR打开所有文件。
答案 0 :(得分:1)
第int dest= open(file_name, O_CREAT|O_RDRW)行是错误的。 当您将O_CREAT指定为标志时,open()希望您提供第三个参数,即权限位。
int dest= open(file_name, O_CREAT|O_RDRW)
这意味着你必须做到,例如int dest= open(file_name, O_CREAT|O_RDRW, 0755);。由于您正在复制文件,因此可以使用stat()读取该文件的现有权限,并在打开和创建目标文件时提供相同的权限。
int dest= open(file_name, O_CREAT|O_RDRW, 0755);
还要记住,创建新文件时文件权限位受umask影响,如果复制现有权限位,则可能需要在复制文件之前调用umask(0);,这样您总能获得与原始文件具有相同的权限。
umask(0);