如何确保当我的流程在文件上运行时,没有其他进程试图写入或删除它?

StackOverflow https://stackoverflow.com/questions/3890515

  •  28-09-2019
  •  | 
  •  

如果我的流程试图从文件中读取,那么我如何确保我的代码(C语言)没有其他进程写入或删除它(包括用于删除文件的系统命令)?

另外,是否可以在所有操作系统(Windows,Linux,Solaris,HP-UX,VXWorks等)上实现这一目标?

有帮助吗?

解决方案

编辑:我将回答UNIX/Linux

正如GSPR和其他人所说,使用 fcntl, flock, 等等。但是,请警告那些是 咨询锁定 方法。

这是什么意思?这意味着您可以警告其他过程,您当前正在使用文件或部分文件,但是 您不能强行阻止他们忽略您,并在您的文件上写下.

没有强制性锁定原始图。您可以利用权限来发挥自己的优势,但是您永远无法获得全部保证 - 根用户可以始终超出您的限制。我认为没有办法解决这个问题。

其他提示

对于POSIX系统,请看一下 fcntl. flock 尽管我认为这不是Posix的一部分,但也可能引起人们的关注。

您必须使用读取共享权限打开文件,这意味着其他任何试图打开它的人只能获得读取访问。正如 @pointy所说,这是特定于操作系统的,您可能必须为Windows,Linux等单独编码此编码。但是,大多数现代OSS 应该 支持这个。

复制文件,进行更改,然后将其重命名为原始内容。

另一种方法(如果该文件尚不存在)是使用独家标志创建文件,然后将其从文件系统中删除。执行您的写作,然后将其硬链接回文件系统(目前仅作为开放inode存在)。您可以使用 /proc 对于源路径。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top