flock进程锁
作者:bin什么是flock进程锁:
标识唯一性的锁。
应用场景:
1、多个进程编辑同一个文件;
2、相同进程只能存在一个;
使用方法:
flock (fd, LOCK_EX|LOCK_NB);
参数
fd : 文件路径
操作类型 : flock主要三种操作类型:
LOCK_SH,共享锁,多个进程可以使用同一把锁,常被用作读共享锁; LOCK_EX,排他锁,同时只允许一个进程使用,常被用作写锁; LOCK_UN,释放锁,同时flock也会随着进程的关闭而被自动释放掉。 LOCK_NB,在尝试锁住该文件的时候,发现已经被其他服务锁住,会返回错误;
服务会阻塞等待直到锁被释放(进程等待):
flock(fd,LOCK_EX)
服务会返回错误发现文件已经被锁住时(返回错误码ret = -1, errno = EWOULDBLOCK ):
ret = flock(fd,LOCK_EX|LOCK_NB)
实例:
 bool getFlock(const string& file)
 {
     int fd = open(file.c_str(), O_CREAT|O_RDONLY, 0666);
     if (fd == -1) {
           if (errno != ENOENT) { return false; }
           string baseDir = "/";
           string path = file;
           if (testDir(baseDir, path) != 0) { return false; }
           fd = open(file.c_str(), O_CREAT|O_RDONLY, 0666);
           if (fd == -1) { return false; }
      }
      if (flock(fd, LOCK_EX | LOCK_NB) != 0) { return false; }
      return true;
 }