web-dev-qa-db-ja.com

(moreutilsからの)スポンジはどのように機能しますか?

スポンジはstdinを「吸収」し、それをアトミックにファイルに書き込むことができるため、cat f|sponge a。私はそれがこれをどのように正確に達成するか知りたいです。入力がいつ終了したかをどうやって知るのですか?

1
HappyFace

straceまたは同様のものは、spongeによって使用されるシステムコールを表示します。これはおそらく write(2) 入力 read(2) 標準入力から一時ファイルへ、次に rename(2) 入力が終了すると、その一時ファイルから目的の出力ファイル名へ。 read(2)呼び出しが失敗するか、0(ファイルの終わりを示す)を返すと、入力は終了します。その時点で、spongeは名前を変更できます。

3
thrig