Когда файл открывается в режиме добавления, ОС гарантирует, что все записи будут выполняться в конце. Таким образом, данные от одного модуля записи не будут перезаписывать данные от другого модуля записи.
Это применимо только в том случае, если файл открыт в режиме добавления, то есть с >>
в оболочке.Если создатель файла открывает его с помощью >
, то эта гарантия не действует, и возможна следующая последовательность:
> out
; теперь в позиции 0 >> out
; теперь в позиции 0 hello
, теперь в позиции 6 world
, это записано в позиции 6, а процесс 2 теперь находится в позиция 12 ой
, это записано в позиции 6, потому что положение файла процесса 1 не изменилось. В Debian (с 2001 года или около того) файл .xsession-errors
создается `/ etc / X11 / Xsession и открывается в режиме добавления, так что все в порядке:
exec >> "$ ERRFILE" 2> & 1
Я не знаю, относится ли это ко всем дистрибутивам, которые регистрируют в ~ / .xsession-errors
.
Пока все будут открывать файл в режиме добавления, весь вывод будет присутствовать. Однако вывод может быть фрагментирован. На практике достаточно небольшие записи в обычный файл являются атомарными. Все, что меньше 512B, должно быть достаточно маленьким везде, и я думаю, что Linux гарантирует больше ». Таким образом, каждая строка журнала должна оставаться нетронутой, даже при одновременном использовании нескольких авторов, при условии, что они используют вывод с строчной буферизацией и что строки не слишком длинные.
¹ Обратите внимание, что POSIX не гарантирует ничего, кроме каналов.