注:在程序退後,會自動解鎖。
#include stdio.h>
#include stdlib.h>
#include sys/file.h> // 提供flock()函數,從#include可以看出,它是一個系統調用,而不是一個庫函數
#include unistd.h>
// 編譯方法:
// 假設檔案名為x.cpp,則為g++ -g -o x x.cpp
// 需要帶一個指令行參數argv[1],
// 必須是一個已經存在的檔案路徑,可以為一個0位元組的檔案
int main(int argc, char *argv[])
{
int fd = open(argv[1], O_RDONLY);
if (-1 == fd)
{
perror("open");
exit(1);
}
printf("%d try to get lock\n", getpid());
// 獨占性加鎖,如果想允許其它加鎖也可以成功,則應當改用LOCK_SH,另外還有LOCK_NB供選擇性使用
if (-1 == flock(fd, LOCK_EX))
perror("flock");
close(fd);
printf("%d locked now, enter any key to continue ...\n", getpid());
getchar();
printf("%d prepare to release lock\n", getpid());
// 釋放鎖
if (-1 == flock(fd, LOCK_UN))
perror("fulock");
printf("lock was released now\n");
printf("process %d exited now\n", getpid());
close(fd);
return 0;
}