Linux上的强制文件locking

人们总是告诉我Linux / Unix是更好的操作系统。 我现在在Linux上编写Java,遇到一个问题,我可以很容易地重现:我可以在我的硬盘驱动器上dd文件,并在dd仍然继续时在Nautilus中删除它。

为什么linux不能执行强制性的文件locking保护R / W?

Solutions Collecting From Web of "Linux上的强制文件locking"

要在Linux上进行强制锁定,必须使用-o mand选项装载文件系统,并且必须在文件上设置gx,g+s权限。 也就是说,您必须禁用组执行,并启用setgid。 执行此操作后,根据文件描述符上的O_NONBLOCK的值,所有访问都将使用EAGAIN进行阻止或出错。 但要小心:“在所有已知版本的Linux中实施强制锁定都受到使其不可靠的竞争条件的影响……因此依靠强制锁定是不可取的。 参见fcntl(2)

你不需要锁定。 这不是一个错误,而是一个选择,你的假设是错误的。

文件系统使用引用计数,当所有到文件的硬链接被删除并且所有的文件描述符被关闭时,它将标记文件为空闲。

这种方法允许Windows安全的操作,例如删除,移动和重命名正在使用的文件,而不需要锁定或破坏任何东西。

删除文件后,您的dd操作即将成功。

http://en.wikipedia.org/wiki/Reference_counting#Disk_operating_systems

Linux和Unix操作系统可以强制执行文件锁定,但是由于其多用户设计的原因,默认情况下不会这样做。 尝试阅读手册页flockfcntl 。 这可能会让你开始。