Tcl 8.5 では、フラグがシステム コールに渡されるように、 Unixでの Tcl の動作が変更されました。これにより、OS は常にデータをファイルに追加し、FD がサブプロセスに渡されるときに継承されます。ログの場合、それはまさに正しいことです。(8.4 以前、および Windows 上のすべてのバージョンでは、動作は Tcl のファイル チャネル実装内でシミュレートされます。これは、内部的に の直前で終了します。同じファイルであり、FD がサブプロセスに渡されると、間違いなく安全ではありません。) (8.5 の新機能) を使用して、開いているファイルの切り捨てを管理できます。O_APPEND
open()
seek()
write()
chan truncate
a+
-開いたファイル。
シークツーエンドの動作が必要ない場合は、a+
(またはa
) を使用しないでください。次のように、フラグr+
の組み合わせを試してください。
set f [open $filename {RDWR CREAT}]
比較のために、a+
オプションは現在flags とまったくRDWR CREAT APPEND
同じであり、長いフラグのすべての組み合わせが短い形式のフラグ指定子で記述できるわけではありません。を指定APPEND
していない場合は、自分で行う必要がありseek $f 0 end
ます (ログに追加する場合は、複数のプロセスの問題に注意してください。これAPPEND
が必要になると、他の方法で正しくシミュレートすることが非常に難しくなります)。