日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux文件锁flock

發(fā)布時間:2025/3/14 linux 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux文件锁flock 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

轉(zhuǎn)自:?http://blog.csdn.net/jiang1013nan/article/details/17849499

作者:?魚翅1013

轉(zhuǎn)發(fā)原因: 作者從一個理解的角度描述,真經(jīng)驗(yàn)

?

在多個進(jìn)程同時操作同一份文件的過程中,很容易導(dǎo)致文件中的數(shù)據(jù)混亂,需要鎖操作來保證數(shù)據(jù)的完整性,這里介紹的針對文件的鎖,稱之為“文件鎖”-flock。

flock,建議性鎖,不具備強(qiáng)制性。一個進(jìn)程使用flock將文件鎖住,另一個進(jìn)程可以直接操作正在被鎖的文件,修改文件中的數(shù)據(jù),原因在于flock只是用于檢測文件是否被加鎖,針對文件已經(jīng)被加鎖,另一個進(jìn)程寫入數(shù)據(jù)的情況,內(nèi)核不會阻止這個進(jìn)程的寫入操作,也就是建議性鎖的內(nèi)核處理策略。 flock主要三種操作類型: LOCK_SH,共享鎖,多個進(jìn)程可以使用同一把鎖,常被用作讀共享鎖; LOCK_EX,排他鎖,同時只允許一個進(jìn)程使用,常被用作寫鎖; LOCK_UN,釋放鎖; 進(jìn)程使用flock嘗試鎖文件時,如果文件已經(jīng)被其他進(jìn)程鎖住,進(jìn)程會被阻塞直到鎖被釋放掉,或者在調(diào)用flock的時候,采用LOCK_NB參數(shù),在嘗試鎖住該文件的時候,發(fā)現(xiàn)已經(jīng)被其他服務(wù)鎖住,會返回錯誤,errno錯誤碼為EWOULDBLOCK。即提供兩種工作模式:阻塞與非阻塞類型。 服務(wù)會阻塞等待直到鎖被釋放: flock(lockfd,LOCK_EX) 服務(wù)會返回錯誤發(fā)現(xiàn)文件已經(jīng)被鎖住時: ret ?= flock(lockfd,LOCK_EX|LOCK_NB) 同時ret = -1, errno =?EWOULDBLOCK? flock鎖的釋放非常具有特色,即可調(diào)用LOCK_UN參數(shù)來釋放文件鎖,也可以通過關(guān)閉fd的方式來釋放文件鎖(flock的第一個參數(shù)是fd),意味著flock會隨著進(jìn)程的關(guān)閉而被自動釋放掉。 flock其中的一個使用場景為:檢測進(jìn)程是否已經(jīng)存在; 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; }

轉(zhuǎn)載于:https://www.cnblogs.com/scroot/p/5197331.html

總結(jié)

以上是生活随笔為你收集整理的Linux文件锁flock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。