歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux中使用flock函數

多進程寫文件操作一般要求互斥,這需要使用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