Quando um arquivo é aberto no modo de anexação, o sistema operacional garante que todas as gravações ocorram no final. Assim, os dados de um escritor não substituirão os dados de outro gravador.
Isso se aplica somente se o arquivo for aberto no modo de acréscimo, ou seja, com >>
no shell. Se o criador do arquivo abrir com >
, essa garantia não será aplicada e é possível ter essa sequência:
- Processo 1:
>out
; agora na posição 0 - Processo 2:
>>out
; agora na posição 0 - Processo 1: escreva
hello
, agora na posição 6 - Processo 2: escreva
world
, isto está escrito na posição 6 e o processo 2 está agora na posição 12 - Processo 1: escreva
oops
, isto está escrito na posição 6 porque a posição do arquivo do processo 1 não mudou.
No Debian (desde 2001 ou por aí), o arquivo .xsession-errors
é criado por '/ etc / X11 / Xsession e é aberto no modo append, então está tudo bem:
exec >>"$ERRFILE" 2>&1
Não sei se esse é o caso em todas as distribuições que registram em ~/.xsession-errors
.
Enquanto todos abrirem o arquivo no modo append, todas as saídas estarão presentes. A saída pode ser fragmentada no entanto. Na prática, pequenas gravações suficientes em um arquivo regular são atômicas. Qualquer coisa menor que 512B deve ser pequena o suficiente em todos os lugares, e acho que o Linux garante mais do que isso¹. Assim, cada linha de log deve aparecer intacta, mesmo com vários escritores concorrentes, supondo que os escritores usem saída com buffer de linha e que as linhas não sejam excessivamente longas.
¹ Observe que o POSIX não garante nada, exceto para pipes.