linux 中的檔案鎖

2021-07-14 11:07:52 字數 750 閱讀 6754

linux執行多個程序同時對一檔案進行讀寫,雖然每乙個read和write都是原子操作,但核心並沒有在兩個讀寫操作之間加以同步。因此,當乙個程序多次呼叫read讀檔案時,就有可能在某兩次讀之間被另一程序所寫,因此,讀的的值將發生錯誤,造成了檔案資料的隨機性衝突,為解決此類併發程序對共享檔案的訪問控制問題,linux設計了鎖機制。

對檔案加鎖有兩種:檔案鎖和記錄鎖。檔案鎖(檔案鎖定)用來鎖定整個檔案,記錄鎖(檔案區鎖定)用來鎖定檔案的某一區域,甚至是某乙個位元組。檔案鎖實現了不同程序對檔案的共享與獨佔。

檔案鎖通過以原子操作的方式建立鎖檔案,確保該檔案在同一時刻不會被其他程式建立。在程序開啟檔案時以o_rdwr | o_create | o_excl模式,對整個檔案進行加鎖。

eg:  open(lock_file , o_rdwr | o_create | o_excl, 0444)

記錄鎖通過fcntl函式,以struct flock實現對檔案設定鎖。fcntl亦用來對檔案鎖資訊的查詢。

eg: fcntl(int fildes, int command, struct flock *)

其中:command可以為:f_getlk   f_setlk   f_setlkw

flock結構體:

struct flock

記錄鎖型別:共享鎖f_rdlck、獨佔鎖f_wrlck、解鎖f_unlck(用來清除鎖)

共享鎖允許多個程序同時對檔案進行都操作,亦稱讀鎖

獨佔鎖用來隔離檔案內容,防止被其他程序所寫,亦稱互斥鎖。

linux中的fctnl檔案鎖

linux中fctnl檔案鎖 核心2.4.21 fctnl可以實現對檔案進行加鎖,保證多程序對同一檔案操作的正確性。下面是乙個簡單封裝的檔案加鎖函式 int start lock file int fd,int write lock,int wait lock else slock.l whence...

Linux程式設計中的檔案鎖之flock

在多執行緒開發中,互斥鎖可以用於對臨界資源的保護,防止資料的不一致,這是最為普遍的使用方法。那在多程序中如何處理檔案之間的同步呢?我們看看下面的圖 圖中所示的是兩個程序在無同步的情況下同時更新同乙個檔案的過程,其主要的操作是 1.從檔案中讀取序號。2.使用這個序號完成應用程式定義的任務。3.遞增這個...

Linux中的兩種檔案鎖 協同鎖與強制鎖

檔案鎖是一種檔案讀寫機制,在任何特定的時間只允許乙個程序訪問乙個檔案。利用這種機制能夠使讀寫單個檔案的過程變得更安全。在這篇文章中,我們將 linux中不同型別的檔案鎖,並通過示例程式來理解它們之間的不同之處。我們將採取以下的例子來解釋為什麼需要使用檔案鎖。1 程序 a 開啟和讀取乙個檔案,此檔案包...