【发布时间】:2014-04-25 18:09:39
【问题描述】:
我在 bash 中找到一个关于锁定文件的好概念时遇到了问题,
基本上我想实现以下目标:
- 锁定文件
- 读入文件中的数据(多次)
- 处理数据。
- 将新内容写入文件(不一定要写入末尾)
- 解锁该文件
对我来说,用flock 做这件事似乎是不可能的,因为文件描述符只会移动一次到文件的末尾。
创建临时文件也会失败,因为我可能会覆盖已经读取的行,这也是不可能的。
编辑:
另请注意,我无法控制的其他脚本可能会尝试写入该文件。
所以我的问题是如何在第 1 步中创建一个锁,以便它跨越第 2、3、4 步,直到我在第 5 步中再次解锁?
【问题讨论】:
-
给定一个
file,您可以在步骤1中创建一个临时file.lock并在步骤5中将其删除。在步骤2-4中,检查file.lock是否存在。 -
嗯,也许我需要稍微修改一下这个问题!我不能确定不是我的脚本的另一个工具正在访问它!
-
如果文件存在并且“另一个工具”具有有效的读/写权限,您将无法避免在脚本中发生这种情况。如果可以的话,您可以考虑更改文件的权限,或者将文件重命名/mv 到安全的地方并对其进行操作,完成所有操作后,将文件移动/重命名为其原始名称/位置。跨度>
-
@Kent 我知道我不能阻止程序,因为锁不是强制性的。但我仍然想锁定那个文件。尽管移动可能会奏效,但如果脚本停止或计算机关闭,可能会产生不必要的副作用,例如丢失该文件