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

原文地址:https://www.cnblogs.com/byfei/p/3112267.html