1

所以我正在使用一个用 TCL 编写的程序,它使用 FLOCK 函数来锁定文件。我在比它当前运行的版本更新的 Linux 上测试它,我发现当更新的机器运行脚本时,它使用 /usr/bin/flock 中的 FLOCK,这与 FLOCK 的 TCL 版本不同。TCL 版本使用 -read -write 等,而 Linux 版本使用完全不同的选项。

简而言之,程序在执行任何 FLOCK 调用时都会停止工作并出错。如果我更改选项以适应 Linux 版本,它会破坏其他机器上的程序。

有没有办法让它使用 TCL 版本而不是 Linux 版本?

4

1 回答 1

3

Tcl 本身不附带flock命令,但如果您进行交互测试,您可能会看到它自动尝试使用系统命令。这种系统命令的自动使用不是在脚本中完成的(由于路径不同,这将极易出现不稳定),因此在编写脚本时,您应该明确说明您的意思。

如果你想使用系统命令(它本身是不可移植的,尤其是对于非 Linux 系统),那么只需执行以下操作:

exec flock $options...

请注意,Tcl 对 shell 使用不同形式的参数引用。这有时会在写exec电话时抓住人们。

或者,使用TclX 包flock中的 Tcl 命令。语法与 Linux 系统实用程序的语法略有不同,很大程度上是因为它的级别较低。对它有利的是,它更便携。

于 2012-08-02T10:07:00.933 回答