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

  • 相关阅读:
    mac攻略(八) -- 神器zsh和iterm2的配置
    linux学习(二) -- ubuntu下lnmp环境的配置
    linux学习(一) -- ubuntu下lamp环境的配置
    算法学习(一) -- 基本算法
    laravel5.2总结--数据填充
    laravel5.2总结--数据迁移
    laravel5.2总结--redis使用
    laravel5.2总结--关联关系
    mac攻略(七) -- 环境变量PATH分析
    mac攻略(六) -- mac根目录分析
  • 原文地址:https://www.cnblogs.com/byfei/p/3112267.html
Copyright © 2020-2023  润新知