Якщо ми використовуємо, echo 1234 >> some-file
тоді Документація говорить, що результат додається.
Я здогадуюсь, що якщо деякий файл не існує, O_CREAT створить новий файл. Якщо >
він використовувався, O_TRUNC буде усікати існуючий файл.
У разі >>
: Чи буде файл відкрито як O_WRONLY (або O_RDWR) і буде зроблено прагнення закінчити і записати операцію, імітуючи O_APPEND? Або файл буде відкрито як O_APPEND, залишивши його в ядрі, щоб переконатися, що додавання відбувається?
Я запитую це тому, що процес консерватора перезаписує деякі маркери, вставлені ехою, коли вихідний файл знаходиться з точки монтажу NFS, а в документації NFS йдеться, що O_APPEND не підтримується на сервері, тому ядро клієнта доведеться обробляти його. Я думаю, що процес консерватора використовує O_APPEND, але не впевнений у тому, що баш >>
на Linux, тому задайте тут питання.
O_APPEND
вона не підтримується; проблема в тому, що вона наслідується. У локальній файловій системі декілька процесів запису в один і той же файл, відкритий зO_APPEND
ніколи, не перезаписують дані один одного; на NFS,O_APPEND
імітується шляхом пошуку до кінця перед написанням, що залишає можливість перегонових умов. На NFS це не обійти; кожному паралельному письменнику потрібно написати свій файл. Єдиний спосіб подолати це - налаштувати серверний процес на сервері NFS, надати журнали реєстраторів|nc server port
і сервер додавати в журнал вхідні дані.