目前遇到一個問題:多個進程對同一個文件進行寫操作,如何避免沖突。研究了一下,做個小結。
對於多進程寫文件,主要有以下兩種處理方式:
1.類似於Linux日志文件服務
啟動一個logger進程,其他進程向logger發消息,即把數據發送給logger,由logger來寫文件,這種方法最安全,但是實現上相對復雜
2.采用文件鎖
對當前讀寫文件進行加鎖處理,簡單說下兩種加鎖方式:
flock():文件級別的鎖,針對整個文件進行加鎖
fcntl()函數:段級別的鎖,能夠針對文件的某個部分進行加鎖
另外,對於讀寫相對不很頻繁,每次寫入數據量比較小的這種情況,不加鎖也可以接受,但打開文件操作時,必須啟用O_APPEND選項,以免造成多個進程相互覆蓋寫入的情況。
在O_APPEND模式下,文件寫入操作是這樣的一個原子操作:將位置指針移動至文件末尾,寫入數據。