Como a esponja (de moreutils) funciona?

1

A esponja pode "absorver" o stdin e gravá-lo atomicamente em um arquivo, permitindo fazer um cat f|sponge a . Eu quero saber exatamente como isso é feito. Como ele sabe quando a entrada está concluída?

    
por HappyFace 22.11.2018 / 20:23

1 resposta

3

strace ou similar mostrará as chamadas do sistema usadas por sponge , o que provavelmente é para write(2) a entrada read(2) da entrada padrão para um arquivo temporário e, em seguida, para rename(2) esse arquivo temporário para o nome do arquivo de saída desejado quando a entrada terminar. A entrada termina quando uma chamada read(2) falha ou retorna 0 (que indica o fim do arquivo), ponto no qual sponge pode fazer a renomeação.

    
por 22.11.2018 / 20:31