锁定实际文件与空锁定文件的优缺点是什么?

  • 本文关键字:文件 锁定 优缺点 是什么 unix
  • 更新时间 :
  • 英文 :


我的程序正在写入二进制文件,并且该程序可能有多个实例访问同一用户的同一二进制文件。在UNIX/Linux中,我看到了一些程序(尤其是守护程序进程)锁定一个空锁定文件,而不是需要锁定的实际共享数据(因此,它们不是锁定~/.data/foo,而是锁定~/.data/foo.lck)。锁定实际文件与空锁定文件有哪些优点?

flock不受NFS或所有版本的其他网络文件系统的支持(直到2.6.12,Linux甚至不支持Linux)。另一方面,O_CREAT|O_EXCL在更多的文件系统上更可靠,并且已经更长了。

即使在网络文件系统上支持flock的系统上(或您不需要这种灵活性的情况),O_CREAT|O_EXCLflock一起也非常有用,因为它可以区分干净的关闭和非清洁关闭。 flock有助于自动消失,但这也无需区分为什么它消失了。

蜂拥而至的文件本身可以防止原子写作(副本,擦除旧,重命名)或任何其他可能删除现有文件的情况。有时,"实际文件"在整个程序的整个运行中并不总是具有相同的inode。因此,在这种情况下,单独的文件也更加方便。这在这些foo.lck情况下非常常见,因为通常您在短时间内锁定foo,并且可能在此过程中删除。

我看到一个空锁定文件的三个弊端:

  • 目录的用户权限应允许您创建一个文件。
  • 在磁盘空间问题的情况下,这可能会失败。
  • 如果您的程序崩溃,Lockfile仍然存在。

我看到一个修改实际文件的名称的骗局:

  • 如果您的程序崩溃,您的文件已更改(只有文件名,但可能会引起混乱)。

显然,我看到空锁定文件的一个大优势:

  • 您的原始文件根本不会更改。

顺便说一句,我相信这个问题更适合软件工程社区。

最新更新