海綿可以“吸收”標準輸入並將其以原子方式寫入文件,從而可以執行cat f|sponge a
. 我想知道它究竟是如何做到這一點的。它如何知道輸入何時完成?
strace
或類似的將顯示 使用的系統呼叫sponge
,這可能是從標準輸入輸出到臨時文件write(2)
的輸入read(2)
,然後rename(2)
在輸入結束時到該臨時文件到所需的輸出文件名。當read(2)
呼叫失敗或返回0
(表示文件結束)時輸入結束,此時sponge
可以進行重命名。
引用自:https://unix.stackexchange.com/questions/483524