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;
}

 

原文转自:http://www.cppblog.com/Tim/archive/2011/10/27/159201.html

你可能感兴趣的:(职场,休闲,linux程序只启动一次,linux进程只启动一次)