歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux中使用flock函數

Linux中使用flock函數

日期:2017/3/1 9:47:45   编辑:Linux編程

多進程寫文件操作一般要求互斥,這需要使用flock函數來獲得文件鎖。下面是一個使用該函數的例子。

程序流程:

  1. 嘗試獲得文件互斥鎖
  2. 如果獲得成功,等待10秒,此時可以運行當前程序的另一個實例,觀察是否可以再次獲得文件鎖
  3. 如果獲取不成功,則直接退出。這裡需要指定LOCK_NB參數,否則flock會阻塞進程直到得到了文件鎖

lockfile.cpp代碼:

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>

int main(){
int fd = open( "data", O_CREAT | O_TRUNC);
if( -1 == flock( fd, LOCK_NB | LOCK_EX)){// lock_non_block lock_exclusive
printf( "Oops\n");// file locked by others
}else{
printf( "Wait\n");// got file lock
sleep( 10);
}
close( fd);
return 0;
}

makefile代碼:

COMPILE = g++ $< -o $@
lockfile: lockfile.cpp
$(COMPILE)

編譯運行截圖:

Copyright © Linux教程網 All Rights Reserved