天天看點

Linux檔案鎖flock

Linux檔案鎖flock

在多個程序同時操作同一份檔案的過程中,很容易導緻檔案中的資料混亂,需要鎖操作來保證資料的完整性,這裡介紹的針對檔案的鎖,稱之為“檔案鎖”-flock。

flock,建議性鎖,不具備強制性。一個程序使用flock将檔案鎖住,另一個程序可以直接操作正在被鎖的檔案,修改檔案中的資料,原因在于flock隻是用于檢測檔案是否被加鎖,針對檔案已經被加鎖,另一個程序寫入資料的情況,核心不會阻止這個程序的寫入操作,也就是建議性鎖的核心處理政策。

flock主要三種操作類型:

LOCK_SH,共享鎖,多個程序可以使用同一把鎖,常被用作讀共享鎖;

LOCK_EX,排他鎖,同時隻允許一個程序使用,常被用作寫鎖;

LOCK_UN,釋放鎖;

程序使用flock嘗試鎖檔案時,如果檔案已經被其他程序鎖住,程序會被阻塞直到鎖被釋放掉,或者在調用flock的時候,采用LOCK_NB參數,在嘗試鎖住該檔案的時候,發現已經被其他服務鎖住,會傳回錯誤,errno錯誤碼為EWOULDBLOCK。即提供兩種工作模式:阻塞與非阻塞類型。

服務會阻塞等待直到鎖被釋放:

flock(lockfd,LOCK_EX)

服務會傳回錯誤發現檔案已經被鎖住時:

ret = flock(lockfd,LOCK_EX|LOCK_NB)

同時ret = -1, errno = EWOULDBLOCK 

flock鎖的釋放非常具有特色,即可調用LOCK_UN參數來釋放檔案鎖,也可以通過關閉fd的方式來釋放檔案鎖(flock的第一個參數是fd),意味着flock會随着程序的關閉而被自動釋放掉。

flock其中的一個使用場景為:檢測程序是否已經存在;

<a></a>

本文轉自郝峰波部落格園部落格,原文連結:http://www.cnblogs.com/fengbohello/p/4262949.html,如需轉載請自行聯系原作者

繼續閱讀