zoukankan      html  css  js  c++  java
  • (转)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. ");
      return 1;
     }
     lock_result = lockf(fd,F_TEST,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
     //返回0表示未加锁或者被当前进程加锁;返回-1表示被其他进程加锁
     if(lock_result<0)
     {
      perror("Exec lockf function failed. ");
      return 1;
     }
     
      lock_result = lockf(fd,F_LOCK,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
     if(lock_result<0)
     {
      perror("Exec lockf function failed. ");
      return 1;
     }

     printf("Pid: %ld process locked the file. ",(long)getpid());
     
     //do something
     while(getchar()<0);
     
     printf("Pid: %ld process release the file. ",(long)getpid());
     return 0;
  • 相关阅读:
    延迟加载和缓存
    动态SQL
    Mybatis框架模糊查询+多条件查询
    mybatis增删改
    初始mybatis(二)
    Struts2框架和SpringMvc框架的区别
    MyBatis框架与Hibernate 框架的区别
    初始mybatis
    Servlet
    find命令使用
  • 原文地址:https://www.cnblogs.com/lihaiping/p/4554802.html
Copyright © 2011-2022 走看看