国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

詳解Linux文件鎖flock

2024-09-05 23:03:16
字體:
來源:轉載
供稿:網友

在多個進程同時操作同一份文件的過程中,很容易導致文件中的數據混亂,需要鎖操作來保證數據的完整性,這里介紹的針對文件的鎖,稱之為“文件鎖”-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其中的一個使用場景為:檢測進程是否已經存在;

int checkexit(char* pfile){  if (pfile == NULL)  {      return -1;   }    int lockfd = open(pfile,O_RDWR);  if (lockfd == -1)   {      return -2;   }    int iret = flock(lockfd,LOCK_EX|LOCK_NB);  if (iret == -1)   {      return -3;   }    return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三亚市| 集安市| 梓潼县| 大邑县| 福泉市| 永修县| 明溪县| 柘荣县| 武山县| 那坡县| 莱西市| 井陉县| 玛沁县| 分宜县| 达州市| 同仁县| 庆安县| 集安市| 当雄县| 富川| 稻城县| 铜鼓县| 沂水县| 三穗县| 普宁市| 晋中市| 兴安县| 当涂县| 黑河市| 孟连| 定边县| 靖边县| 信阳市| 济宁市| 桃园县| 望江县| 大同市| 水富县| 锦屏县| 九龙坡区| 临猗县|