私のプログラムがクラッシュした場合、一時ファイルを避けたいと思います。
UNIXの驚くべきことは、ファイルを削除した後でもファイルを開いたままにできることです。
だからファイルを開いたら、時々削除してくださいそれから処理速度が遅い場合、プログラムがクラッシュしても、ユーザーがファイルをクリーンアップする必要がない可能性があります。
シェルでは、私はしばしば次のようなものを見る:
generate-the-file -o the-file
[...loads of other stuff that may use stdout or not...]
do_slow_processing < the-file
rm the-file
ただし、プログラムがクラッシュした場合、rm
ユーザーはクラッシュする前にプログラムをクリーンアップする必要がありますthe-file
。
Perlでは、次のことができます。
open(my $filehandle, "<", "the-file") || die;
unlink("the-file");
while(<$filehandle>) {
# Do slow processing stuff here
print;
}
close $filehandle;
これにより、ファイルが開くとすぐに削除されます。
シェルにも同様の構造がありますか?
ベストアンサー1
これはcsh、tcsh、sh、ksh、zsh、bash、ash、sashでテストされました。
echo foo > the-file
(rm the-file; cat) < the-file | do_slow_processing
do_other_stuff
または必要に応じて:
(rm the-file; do_slow_processing) < the-file
do_other_stuff
興味深いことに、fifoでも動作します。
mkfifo the-fifo
(rm the-fifo; cat) < the-fifo | do_slow_processing &
echo foo > the-fifo
コンテンツが作成されるまでリーダーがブロックされるからです。