ファイルにパイプされるプロセスがあるとしましょう。
yes > foo
これでファイルを消去または空にしたいのですが、foo
プロセスはファイルに書き込もうとしています。つまり、ファイルを消去した後にファイルの再入力を開始します。
可能ですか?
答え1
yes >> foo
ファイルを消去するにはyes > foo
、単独で使用:>foo
yes >> foo
理由read
foo
で開くO_APPEND
。これにより、ファイルオフセットは各書き込みの前にファイルの末尾に配置されます。
したがって、yes
ファイルに書き込むfoo
たびにファイルポインタがになりますfoo
。また、: > foo
ファイルをゼロバイトに切り捨てます。 0バイトの「終了」でファイルポインタの位置が変更され、0yes
バイトの先頭で次の書き込みが再開されます。foo
O_APPEND
foo
答え2
こうしてyes > foo
またやればいい。する最初の実行後にfooファイルのすべてのエントリを削除します。
次のいずれかの方法を使用できます。
rm foo
yes > foo
> foo
yes > foo
echo "" > foo
yes > foo