我有兩個進程每個寫入大量緩衝區的數據,我想控制同步這些進程的寫入到一個文件。包括(A1,A2,A3)的處理1寫入緩衝器A和包括(B1,B2,B3)的處理2寫入緩衝器B的處理1。當我們使用write()
系統調用將這些緩衝區寫入磁盤到同一文件(整個緩衝區一次:write(fd, A, sizeof(A))
)時,文件架構如何?如何同步 - 使原子 - 從兩個進程寫入一個文件?
- 是這樣的:A,B或B,A也許?
- ,也可能是這樣的:A1,A2,B1,A3,...
我問這是因爲系統調用是原子的。如果我們寫的數據緩衝區太大,會發生什麼情況。它是否像普通磁盤文件的管道一樣?
因此,我們沒有任何信號,並且啓用了'O_APPEND',我們應該有A,B或B,A。我對嗎? –
@Majid - 是的,假設系統中沒有任何東西會打斷你,你會得到A,B或B,A取決於誰先走。 – unpythonic
值得注意的是,在本地文件系統上的正常文件寫入不會中斷。 NFS有一個標誌使它們可以被中斷,但是默認是關閉的。 –