Если мы используем, echo 1234 >> some-file
то Документация говорит, что вывод добавлен.
Я предполагаю, что если некоторый файл не существует, то O_CREAT создаст новый файл. Если >
был использован, то O_TRUNC будет обрезать существующий файл.
В случае >>
: Будет ли файл открыт как O_WRONLY (или O_RDWR) и найден конец и операция записи выполнена, имитируя O_APPEND? Или файл будет открыт как O_APPEND, оставляя его ядру, чтобы убедиться, что добавление произойдет?
Я спрашиваю об этом, потому что процесс сохранения перезаписывает некоторые маркеры, вставленные с помощью echo, когда выходной файл находится в точке монтирования NFS, а в документации NFS говорится, что O_APPEND не поддерживается на сервере, поэтому ядру клиента придется с этим справляться. Я предполагаю, что процесс сохранения использует O_APPEND, но не уверен в bash >>
на linux, поэтому задаю вопрос здесь.
O_APPEND
она не поддерживается; проблема в том, что это эмулируется. В локальной файловой системе несколько процессов, выполняющих запись в один и тот же открытый файлO_APPEND
, никогда не будут перезаписывать данные друг друга; в NFSO_APPEND
эмулируется путем поиска до конца перед записью, что оставляет возможность состязаний. На NFS нет пути к этому; каждый параллельный писатель должен написать свой собственный файл. Единственный способ обойти это - настроить серверный процесс на NFS-сервере, сделать так, чтобы регистраторы входили в систему|nc server port
и сервер добавлял входящие данные в журнал.