linux用文件锁实现保证一个程序只能启动一个进程

技术分享#include <stdio.h>

技术分享#include <unistd.h>
技术分享#include <fcntl.h>
技术分享#include <errno.h>
技术分享
技术分享int main(int argc,char* argv[])
技术分享{
技术分享 int fd;
技术分享 int lock_result;
技术分享 struct flock lock;
技术分享 char * pFileName = "tmp.lck";
技术分享 fd = open(pFileName,O_RDWR);
技术分享 if(fd<0)
技术分享 {
技术分享  printf("Open file failed.\n");
技术分享  return 1;
技术分享 }
技术分享 lock_result = lockf(fd,F_TEST,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
技术分享 //返回0表示未加锁或者被当前进程加锁;返回-1表示被其他进程加锁
技术分享 if(lock_result<0)
技术分享 {
技术分享  perror("Exec lockf function failed.\n");
技术分享  return 1;
技术分享 }
技术分享 
技术分享  lock_result = lockf(fd,F_LOCK,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
技术分享 if(lock_result<0)
技术分享 {
技术分享  perror("Exec lockf function failed.\n");
技术分享  return 1;
技术分享 }
技术分享
技术分享 printf("Pid: %ld process locked the file.\n",(long)getpid());
技术分享 
技术分享 //do something技术分享
技术分享 while(getchar()<0);
技术分享 
技术分享 printf("Pid: %ld process release the file.\n",(long)getpid());
技术分享 return 0;
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。