是否有可能在Linux中locking一个文件,所以如果另一个进程打开写入,它是不能被读取?

我们都知道linux / Unix会自动阻止尝试写入到一个当前打开的文件被另一个进程写入。 但是,如果另一个进程打开文件,是否可以阻止/locking对文件的读取访问 ? 我有两个不同的脚本,都是随机启动,在白天运行不同的时间:一个脚本覆盖一个特定的文件; 另一个从该文件读取。 我想第二个阻塞(等待)或失败,如果第一个文件打开。

群(1)工具可以做你想要的

  • 当你想覆盖文件时,取出一个写入locking

    flock -x / path / to / lockfile somecommand文件

  • 让其他命令检查locking。

    flock -n / path / to / lockfile另一个命令文件

如果文件被locking,那么你会得到1的退出代码,否则它是你的,你可以做它你想要的

因为你有完整的un-synchronize运行..你可以做一些简单的事情是让“写”过程创build一个临时名称说.tmp新文件,所以如果它将创build的文件是output1.txt它将工作output1.txt.tmp。

一旦作者完成了它所做的最后一件事是一个mv命令。

从这里你可以做两件事。 一个读者不关心,因为tmp文件是一个不同的inode,mv不会伤害它(只要有一个消费者,Linux会保持它活着),下一个读取将有新的文件。

(只要它不会伤害你最后一次运行旧文件)。

另一种select是,读者查找tmp文件,并在该文件存在时阻塞(这成为一种锁文件)。