【发布时间】:2012-08-01 20:57:28
【问题描述】:
所以我正在使用一个用 TCL 编写的程序,它使用 FLOCK 函数来锁定文件。我在比它当前运行的版本更新的 Linux 上测试它,我发现当更新的机器运行脚本时,它使用 /usr/bin/flock 中的 FLOCK,这与 FLOCK 的 TCL 版本不同。 TCL版本使用-read-write等,而Linux版本使用完全不同的选项。
简而言之,程序在执行任何 FLOCK 调用时都会停止工作并出错。如果我更改选项以适应 Linux 版本,它会破坏其他机器上的程序。
有没有办法让它使用 TCL 版本而不是 Linux 版本?
【问题讨论】:
-
所有
FLOCK命名的东西都将通过内核的flock(2)或fcntl(2)锁定接口;flock(2)仅供参考,不适用于 NFS,因此引入了fcntl(2)以提供强制锁定(很少使用)和过度 NFS 锁定。我建议阅读flock(2)手册页,尤其是NOTES部分,了解可能会帮助您更好地解释您要解决的问题的背景。 -
嗯,TCL 脚本调用 FLOCK 并在文件上使用 -write -nowait。此脚本通常在 CentOS 5.7 上运行。当它在 Ubuntu 12.04 上运行时,FLOCK 行失败并显示“invalid command name 'flock'”。如果我将它更改为使用 Linux 手册页中的 FLOCK 选项,它将在 Ubuntu 上运行,但在 CentOS 5.7 计算机上失败。