欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Linux文件鎖flock

 更新時(shí)間:2016年12月20日 11:50:18   作者:魚(yú)翅1013  
這篇文章主要介紹了詳解Linux文件鎖flock,在多個(gè)進(jìn)程同時(shí)操作同一份文件的過(guò)程中,很容易導(dǎo)致文件中的數(shù)據(jù)混亂,需要鎖操作來(lái)保證數(shù)據(jù)的完整性,這里介紹的針對(duì)文件的鎖,稱之為“文件鎖”-flock。

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

flock,建議性鎖,不具備強(qiáng)制性。一個(gè)進(jìn)程使用flock將文件鎖住,另一個(gè)進(jìn)程可以直接操作正在被鎖的文件,修改文件中的數(shù)據(jù),原因在于flock只是用于檢測(cè)文件是否被加鎖,針對(duì)文件已經(jīng)被加鎖,另一個(gè)進(jìn)程寫入數(shù)據(jù)的情況,內(nèi)核不會(huì)阻止這個(gè)進(jìn)程的寫入操作,也就是建議性鎖的內(nèi)核處理策略。

flock主要三種操作類型:

  • LOCK_SH,共享鎖,多個(gè)進(jìn)程可以使用同一把鎖,常被用作讀共享鎖;
  • LOCK_EX,排他鎖,同時(shí)只允許一個(gè)進(jìn)程使用,常被用作寫鎖;
  • LOCK_UN,釋放鎖;

進(jìn)程使用flock嘗試鎖文件時(shí),如果文件已經(jīng)被其他進(jìn)程鎖住,進(jìn)程會(huì)被阻塞直到鎖被釋放掉,或者在調(diào)用flock的時(shí)候,采用LOCK_NB參數(shù),在嘗試鎖住該文件的時(shí)候,發(fā)現(xiàn)已經(jīng)被其他服務(wù)鎖住,會(huì)返回錯(cuò)誤,errno錯(cuò)誤碼為EWOULDBLOCK。即提供兩種工作模式:阻塞與非阻塞類型。

服務(wù)會(huì)阻塞等待直到鎖被釋放:

flock(lockfd,LOCK_EX)

服務(wù)會(huì)返回錯(cuò)誤發(fā)現(xiàn)文件已經(jīng)被鎖住時(shí):

ret = flock(lockfd,LOCK_EX|LOCK_NB)

同時(shí)ret = -1, errno = EWOULDBLOCK

flock鎖的釋放非常具有特色,即可調(diào)用LOCK_UN參數(shù)來(lái)釋放文件鎖,也可以通過(guò)關(guān)閉fd的方式來(lái)釋放文件鎖(flock的第一個(gè)參數(shù)是fd),意味著flock會(huì)隨著進(jìn)程的關(guān)閉而被自動(dòng)釋放掉。

flock其中的一個(gè)使用場(chǎng)景為:檢測(cè)進(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;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法

    CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法

    我們大多情況是一臺(tái)服務(wù)器一個(gè)IP,這樣配置起來(lái)很簡(jiǎn)單,但是如何想多域名多端口映射的話就沒(méi)那么簡(jiǎn)單了,下面這篇文章主要介紹了CentOS系統(tǒng)下Apache配置多域名或多端口映射的方法,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2016-12-12
  • Centos7搭建主從DNS服務(wù)器的教程

    Centos7搭建主從DNS服務(wù)器的教程

    這篇文章主要介紹了Centos7搭建主從DNS服務(wù)器的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 虛擬機(jī)與物理機(jī)的文件共享方式

    虛擬機(jī)與物理機(jī)的文件共享方式

    文章介紹了如何在Kali?Linux虛擬機(jī)中實(shí)現(xiàn)物理機(jī)文件夾的直接掛載,以便在虛擬機(jī)中方便地讀取和使用物理機(jī)上的文件,通過(guò)設(shè)置和配置,可以實(shí)現(xiàn)臨時(shí)掛載和永久掛載,并提供了詳細(xì)的步驟和注意事項(xiàng)
    2025-01-01
  • Ubuntu16.04搭建php5.6Web服務(wù)器環(huán)境

    Ubuntu16.04搭建php5.6Web服務(wù)器環(huán)境

    今天小編就為大家分享一篇關(guān)于Ubuntu16.04搭建php5.6Web服務(wù)器環(huán)境,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • 整理Linux中字符串的相關(guān)操作技巧

    整理Linux中字符串的相關(guān)操作技巧

    我們?cè)趌inux的操作中經(jīng)常會(huì)對(duì)文件中的字符串進(jìn)行替換、統(tǒng)計(jì)等操作,我們現(xiàn)在來(lái)做一次整理,感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2018-10-10
  • linux用戶和組命令實(shí)例分析【切換、添加用戶、權(quán)限控制等】

    linux用戶和組命令實(shí)例分析【切換、添加用戶、權(quán)限控制等】

    這篇文章主要介紹了linux用戶和組命令,結(jié)合實(shí)例形式分析了Linux系統(tǒng)切換、添加用戶、權(quán)限控制等相關(guān)命令與使用技巧,需要的朋友可以參考下
    2020-03-03
  • Ubuntu中實(shí)現(xiàn)定時(shí)喚醒與自動(dòng)休眠功能

    Ubuntu中實(shí)現(xiàn)定時(shí)喚醒與自動(dòng)休眠功能

    在自動(dòng)化腳本執(zhí)行的時(shí)間段內(nèi)喚醒系統(tǒng)使其正常運(yùn)行,其余時(shí)間則讓其進(jìn)入休眠狀態(tài),以此來(lái)降低能耗,為達(dá)成這一目標(biāo),我編寫了一個(gè)簡(jiǎn)易的腳本,并通過(guò) crontab 配置了自動(dòng)化任務(wù),接下來(lái),我會(huì)詳盡地講解整個(gè)配置過(guò)程,需要的朋友可以參考下
    2024-09-09
  • linux下使用 du查看某個(gè)文件或目錄占用磁盤空間的大小方法

    linux下使用 du查看某個(gè)文件或目錄占用磁盤空間的大小方法

    下面小編就為大家?guī)?lái)一篇linux下使用 du查看某個(gè)文件或目錄占用磁盤空間的大小方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • 如何配置Apache服務(wù)器中的虛擬機(jī)

    如何配置Apache服務(wù)器中的虛擬機(jī)

    Apache 的虛擬主機(jī)就是在一臺(tái)服務(wù)器上運(yùn)行多個(gè)網(wǎng)站,每個(gè)虛擬主機(jī)都可以綁定獨(dú)立的域名,為這些域名可以指定單獨(dú)的目錄,訪問(wèn)這些域名的時(shí)候,Apache 會(huì)打開(kāi)對(duì)應(yīng)目錄里面的東西。本文給大家介紹Apache服務(wù)器虛擬機(jī)的配置方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • Linux命令學(xué)習(xí)總結(jié)之rm命令

    Linux命令學(xué)習(xí)總結(jié)之rm命令

    rm命令用來(lái)刪除Linux系統(tǒng)中的文件或目錄。通常情況下rm不會(huì)刪除目錄,你必須通過(guò)指定參數(shù)-r或-R來(lái)刪除目錄。接下來(lái)通過(guò)本文給大家分享Linux命令學(xué)習(xí)總結(jié)之rm命令,對(duì)linux rm命令相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01

最新評(píng)論