1

そのため、FLOCK 関数を使用してファイルをロックする TCL で記述されたプログラムを使用しています。現在動作している Linux よりも新しいバージョンの Linux でテストしていますが、新しいマシンでスクリプトを実行すると、/usr/bin/flock の FLOCK が使用されることがわかりました。これは FLOCK の TCL バージョンとは異なります。TCL 版では -read -write などを使用しますが、Linux 版ではまったく異なるオプションを使用します。

つまり、FLOCK 呼び出しに到達すると、プログラムは動作を停止し、エラーが発生します。Linux のバージョンに合わせてオプションを変更すると、他のマシンのプログラムが壊れます。

Linux バージョンではなく TCL バージョンを使用する方法はありますか?

4

1 に答える 1

3

Tcl 自体にはflockコマンドが付属していませんが、対話的にテストしている場合は、自動的にシステム コマンドを使用しようとすることがあります。システム コマンドのこのような自動化された使用は、スクリプトでは行われません(さまざまな PATH が原因で非常に不安定になりがちです)。そのため、スクリプトを作成するときは、何を意味するかを明示する必要があります。

system コマンド (それ自体は非移植性であり、特に Linux 以外のシステムには移植できません) を使用する場合は、次のようにします。

exec flock $options...

Tcl は、シェルに対して別の形式の引数引用符を使用することに注意してください。execこれは、呼び出しを書いているときに人々を捕まえることがあります。

または、TclX パッケージflockにある Tcl コマンドを使用します。構文は、Linux システム ユーティリティの構文とは少し異なります。主な理由は、それが少し低レベルであるためです。そのおかげで、むしろ移植性が高くなります。

于 2012-08-02T10:07:00.933 に答える