Por definição, /dev/null
envia alguma coisa escrita para , por isso não Não importa se você escreve no modo append ou não, tudo é descartado. Como não armazena os dados, não há nada para acrescentar, na verdade.
Então, no final, é mais curto escrever > /dev/null
com um sinal >
.
Quanto à adição editada:
The open(2) manpage says lseek is called before each write to a file in append mode.
Se você ler atentamente, verá que está escrito (ênfase minha):
the file offset is positioned at the end of the file, as if with lseek(2)
Ou seja, ele não precisa (realmente) chamar a chamada de sistema lseek
, e o efeito não é estritamente o mesmo: chamar lseek(fd, SEEK_END, 0); write(fd, buf, size);
sem O_APPEND
não é o mesmo que gravar em acrescentar modo, já que com chamadas separadas, outro processo poderia gravar no arquivo entre as chamadas do sistema, destruindo os dados anexados. No modo append, isso não acontece (exceto pelo NFS, que não suporta o modo real append ).
O texto no padrão não menciona lseek
nesse ponto, apenas que escreve vai o fim do arquivo.
So, is truncating /dev/null actually unspecified?
A julgar pela escritura a que você se refere, aparentemente ela é definida pela implementação. Isso significa que qualquer implementação sã fará o mesmo que com pipes e TTYs, ou seja, nada. Uma implementação insana pode fazer outra coisa, e talvez o truncamento possa significar algo sensato no caso de algum outro arquivo de dispositivo.
And do the lseek calls have any impact on write performance?
Teste. É a única maneira de saber com certeza sobre um determinado sistema. Ou leia a fonte para ver onde o modo de acréscimo altera o comportamento, se for em qualquer lugar.