文件锁又叫记录锁,他的作用是:当一个进程正在读或修改文件的某个部分是,可以通过文件锁阻止其他进程修改同一文件区。
不仅仅是文件,对于多进程间共享的资源,都可以通过文件锁进行同步。
文件锁所使用的接口函数为:
int fcntl(int fd, int cmd, struct flock *lock);
/*其中cmd的可选值为:
cmd = F_GETLK,测试是否可以加锁,返回值仅对当前有效,无法保证后续的加锁或解锁一定成功
cmd = F_SETLK,设置锁(加锁或解锁),如果无法设置锁,该函数会立即返回一个EACCESS或EAGAIN错误,而不会阻塞
cmd = F_SETLKW, 阻塞设置一把锁,无法设置锁的时候,会阻塞直到该锁能够进行设置
*/
以下是对文件锁进行的封装:
//file_lock.h
#ifndef FILE_LOCK_H
#define FILE_LOCK_H
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string>
using std::string;
enum class FILE_LOCK_RES{
OK = 0,
FILE_OPEN_FAILED = 1,