如何确保当我的流程在文件上运行时,没有其他进程试图写入或删除它?
-
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
对于源路径。
不隶属于 StackOverflow