flock

flock()會依參數(shù)operation所指定的方式對參數(shù)fd所指的文件做各種鎖定或解除鎖定的動作。此函數(shù)只能鎖定整個文件,無法鎖定文件的某一區(qū)域。
表頭文件 #include<sys/file.h>
定義函數(shù) int flock(int fd,int operation);
參數(shù) operation有下列四種情況:
LOCK_SH 建立共享鎖定。多個進(jìn)程可同時對同一個文件作共享鎖定。
LOCK_EX 建立互斥鎖定。一個文件同時只有一個互斥鎖定。
LOCK_UN 解除文件鎖定狀態(tài)。
LOCK_NB 無法建立鎖定時,此操作可不被阻斷,馬上返回進(jìn)程。通常與LOCK_SH或LOCK_EX 做OR(|)組合。
單一文件無法同時建立共享鎖定和互斥鎖定,而當(dāng)使用dup()或fork()時文件描述詞不會繼承此種鎖定。
返回值 返回0表示成功,若有錯誤則返回-1,錯誤代碼存于errno。

舉例:
#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <sys/file.h>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QString locker = "test.lock";
QFile *fLocker = new QFile(locker);
qDebug() << "1";
if(!fLocker->open(QFile::ReadWrite))
{
    qDebug() << "2";
    return 1;
}
qDebug() << "3";
int lockfd = fLocker->handle();
qDebug() << "4";
if( -1 == flock(lockfd, LOCK_EX) )
{
    qDebug() << "5";
    return 1;
}
qDebug() << "6";

return a.exec();
}

啟動兩次程序,第一個顯示:


1.png

后一個顯示:


2.png

第二個進(jìn)程被阻塞了,只有第一個進(jìn)程結(jié)束或釋放,第二個進(jìn)程才會繼續(xù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容