Jika kita gunakan echo 1234 >> some-file
maka Dokumentasi mengatakan bahwa output ditambahkan.
Dugaan saya adalah, jika beberapa file tidak ada, maka O_CREAT akan membuat file baru. Jika >
digunakan, maka O_TRUNC akan memotong file yang ada.
Dalam kasus >>
: Apakah file akan dibuka sebagai O_WRONLY (atau O_RDWR) dan berusaha untuk mengakhiri dan menulis operasi dilakukan, mensimulasikan O_APPEND? Atau apakah file akan dibuka sebagai O_APPEND, membiarkannya ke kernel untuk memastikan penambahan terjadi?
Saya menanyakan hal ini karena proses conserver menimpa beberapa marker yang dimasukkan oleh echo, ketika file output berasal dari titik mount NFS, & Dokumentasi NFS mengatakan O_APPEND tidak didukung di server, jadi kernel klien harus menanganinya. Saya kira proses conserver menggunakan O_APPEND, tetapi tidak yakin tentang bash >>
di linux, maka mengajukan pertanyaan di sini.
O_APPEND
tidak didukung; masalahnya adalah ini ditiru. Pada sistem file lokal, beberapa proses penulisan ke file yang sama dibuka denganO_APPEND
tidak akan pernah menimpa data masing-masing; pada NFS,O_APPEND
ditiru dengan mencari sampai akhir sebelum menulis, yang meninggalkan kemungkinan kondisi balapan. Tidak ada jalan lain di NFS ini; setiap penulis paralel perlu menulis file sendiri. Satu-satunya cara untuk mengatasi ini adalah menyiapkan proses server pada server NFS, memiliki logger log|nc server port
, dan meminta server menambahkan data yang masuk ke log.