esponja pode “absorver” stdin e gravá-lo atomicamente em um arquivo, permitindo que se faça cat f|sponge a
. Eu quero saber exatamente como ele consegue isso. Como ele sabe quando a entrada é concluída?
esponja pode “absorver” stdin e gravá-lo atomicamente em um arquivo, permitindo que se faça cat f|sponge a
. Eu quero saber exatamente como ele consegue isso. Como ele sabe quando a entrada é concluída?
strace
ou similar mostrará as chamadas de sistema usadas porsponge
, que provavelmente éwrite(2)
a entradaread(2)
da entrada padrão para um arquivo temporário e, em seguida, pararename(2)
esse arquivo temporário para o nome do arquivo de saída desejado quando a entrada terminar. A entrada termina quando umaread(2)
chamada falha ou retorna0
(o que indica o fim do arquivo) em que pontosponge
pode fazer a renomeação.