Isso acontece quando você copia um arquivo com apenas 27 bytes ( strace cp a b
):
read(3, "Who2s there?\nIt's just me!\n", 131072) = 27
write(4, "Who2s there?\nIt's just me!\n", 27) = 27
read(3, "", 131072) = 0
Embora cp
saiba o tamanho (e isso não muda durante a cópia) cp
tenta ler até 128K de dados. Ele pára de copiar se um read()
fornecer zero bytes. Esse é o sinal de que o final do arquivo é atingido.
Se o processo de cópia ler os dados mais lentamente do que está escrito (por exemplo, devido a diferentes prioridades de E / S ou outros limites de E / S como os controladores cgroups), a cópia "nunca" será interrompida.