zoukankan      html  css  js  c++  java
  • linux下C语言中的flock函数用法

    //testprocess.c

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <sys/file.h>
    #include <string.h>

    int main()
    {
     int fd;
     char path[] = "/data/aidi_slave_s001a/backup/test.txt";
     char s[] = "writing......\n";
     extern int errno;
     fd = open(path, O_WRONLY | O_CREAT | O_APPEND);
     if (fd != -1)
     {
      printf("open file %s .\n", path);

      if (flock(fd, LOCK_EX | LOCK_NB) == 0)
      {
       printf("the file was locked by the process.\n");
       if (-1 != write(fd, s, sizeof(s)))
       {
        printf("sucess %s\n", s);
       }
       else
       {
        printf("cannot write the file %s\n", path);
        printf("errno:%d\n", errno);
        printf("errMsg:%s\n", strerror(errno));
       }

      }
      else
      {
       printf("the file was locked by other process.Can't write...\n");
       printf("errno:%d:", errno);
      }

      close(fd);

     }
     else
     {
      printf("cannot open file %s\n", path);
      printf("errno:%d\n", errno);
      printf("errMsg:%s", strerror(errno));
     }
     return 0;
    }

    //testprocess.c

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <errno.h>
    #include <sys/file.h>
    #include <string.h>

    //lockfile.c
    int main()
    {
     int fd, i;
     char path[] = "/data/aidi_slave_s001a/backup/test.txt";
     extern int errno;
     fd = open(path, O_WRONLY | O_CREAT);
     if (fd != -1)
     {
      printf("open file %s .\n", path);
      printf("please input a number to lock the file.\n");
      scanf("%d", &i);
      if (flock(fd, LOCK_EX) == 0)
      {
       printf("the file was locked.\n");
      }
      else
      {
       printf("the file was not locked.\n");
      }
      printf("please input a number to unlock the file.\n");
      scanf("%d", &i);
      if (flock(fd, LOCK_UN) == 0)
      {
       printf("the file was unlocked.\n");
      }
      else
      {
       printf("the file was not unlocked.\n");
      }
      close(fd);

     }
     else
     {
      printf("cannot open file %s\n", path);
      printf("errno:%d\n", errno);
      printf("errMsg:%s", strerror(errno));
     }
     return 0;
    }

  • 相关阅读:
    行为模式-模板方法
    行为模式-策略模式
    行为模式-观察者 模式
    行为模式-责任链模式
    python-json
    mongo资料
    用with管理lock锁
    枚举类使用
    db2常见操作命令
    trancate immediate reuse storage
  • 原文地址:https://www.cnblogs.com/byfei/p/3112267.html
Copyright © 2011-2022 走看看