(转)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;
posted @ 2015-06-05 15:46  lihaiping  阅读(880)  评论(0编辑  收藏  举报