博客搬家,原地址:https://langzi989.github.io/2018/01/06/Unix中fcntl实现对文件加锁功能/
之前有一篇文章详细介绍了fcntl的用法,这一节将说明使用fcntl实现对文件加锁的功能,
fcntl函数原型
fcntl函数如下,具体用法可参考上面的文章。
#include <fcntl.h>
int fcntl(int fd, int cmd, .../*int args or lock args*/);
使用fcntl对文件加锁
当fcntl中的cmd为F_GETLK,F_SETLK,F_SELFKW时为对文件进行锁操作,此时arg参数为flock。注意:使用fcntl对文件加锁,加锁效果类似于自旋锁,只有写写互斥和读写互斥,读读并不互斥。
cmd取值及其操作:
- F_GETLK : 获取当前锁得状态
- F_SETLK : 给当前文件上锁(非阻塞)。
- F_SETLKW : 给当前文件上锁(阻塞,若当前文件正在被锁住,该函数一直阻塞)。
flock结构体定义如下:
struct flock {
short int l_type;
short int l_whence;
off_t l_start;
off_t l_len;
pid_t l_pid;
};
<