程序什么时候想要确保它是文件的创建者?

程序什么时候想要确保它是文件的创建者?

来自 Linux 编程接口

如果程序必须确保它是文件的创建者,那么调用 open() 时应使用 O_EXCL 标志

我想知道什么时候“程序必须确保它是文件的创建者”?

这与程序希望文件的所有者是运行该程序的进程的有效ID的情况有关吗?

对于给定的文件,既然我们可以修改文件的所有者,那么如何才能找到文件的创建者呢?

答案1

O_EXCL 标志与 O_CREAT 标志一起使用,意味着如果文件已经存在,则调用open将失败。如果该文件不存在,将尝试创建并打开它。

其用途之一是创建一个简单的锁定文件。如果多个进程尝试使用 O_CREAT 和 O_EXCL 标志打开同一个文件,则一个进程将成功,其余进程将失败。当然,如果该文件已经存在,例如因为先前的进程退出而没有删除该文件,没有任何的后续尝试都会成功,因此这不是管理锁的最可靠的方法。

另一个用途是创建一个用于写入的文件,该进程确信没有其他进程会写入该文件。如果您要在 中创建文件/tmp,其中许多其他进程正在创建具有相似(可能相同)名称的文件,则可以使用此选项。 mkstempglibc 中的函数使用openO_CREAT 和 O_EXCL 标志进行调用。

Unix/Linux 不记录文件的创建者(如果操作系统支持,可能会发出审核记录。)

相关内容