Se usarmos echo 1234 >> some-file
, a Documentação diz que a saída é anexada.
Meu palpite é que, se algum arquivo não existir, o O_CREAT criará um novo arquivo. Se >
foi usado, o O_TRUNC truncará o arquivo existente.
No caso de >>
: O arquivo será aberto como O_WRONLY (ou O_RDWR) e será solicitado que a operação de finalização e gravação seja concluída, simulando O_APPEND? Ou o arquivo será aberto como O_APPEND, deixando-o no kernel para garantir que os anexos ocorram?
Estou perguntando isso, porque um processo de servidor de servidor substitui alguns marcadores inseridos por eco, quando o arquivo de saída é do ponto de montagem do NFS, e a Documentação do NFS diz que O_APPEND não é suportado no servidor, portanto o kernel do cliente terá que lidar com isso. Eu acho que o processo do conservador está usando O_APPEND, mas não tenho certeza do bash >>
no linux, fazendo a pergunta aqui.
O_APPEND
é que não é suportado; o problema é que ele é emulado. Em um sistema de arquivos local, vários processos de gravação no mesmo arquivo abertoO_APPEND
nunca substituem os dados um do outro; no NFS,O_APPEND
é emulado buscando o final antes de escrever, o que deixa a possibilidade de condições de corrida. Não há como contornar isso no NFS; cada gravador paralelo precisa gravar seu próprio arquivo. A única maneira de contornar isso é configurar um processo do servidor no servidor NFS, fazer com que os registradores façam logon|nc server port
e que o servidor anexe os dados recebidos ao log.