shr*_*sva 5 macos file-io objective-c
我正在处理写入同一目录的多个进程.我有一个目录dir1 /
我的进程在dir1 /下创建了一个文件a.txt.但是,另一个进程创建a-temp1.txt并将其重命名为a.txt.我无法控制其他进程,因为该代码来自库.我可以阻止重命名a-temp.txt吗?
你可以,但它不太可能解决你的问题。我强烈怀疑这是一个XY 问题,几乎可以肯定正确的解决方案是完全重新设计该系统的某些部分,可能通过更改文件名、使用唯一的临时文件、移动到另一个目录或重新设计库的使用(库只做调用者告诉他们做的事情;无论如何,库只是代码)。你不应该试图击败另一个进程;你们都在为同一个用户工作。
话虽如此,当然,您可以阻止您自己的用户 ID 重命名文件。只是拒绝自己的许可。您可以修改该文件:
chmod 400 a.txt
Run Code Online (Sandbox Code Playgroud)
这表示您可以读取该文件,但不能写入该文件。但是,如果您已经有一个打开的文件句柄,则可以继续使用它(这样您就可以继续写入该文件,即使以同一用户身份运行的另一个进程可能不会)。
同样,您可以更改目录的权限:
chmod 500 .
Run Code Online (Sandbox Code Playgroud)
这将阻止重命名,因为文件名保存在目录中。