文件锁

来源:互联网 发布:mac pro 需要关机吗 编辑:程序博客网 时间:2024/05/16 07:54

unix文件锁主要是靠fcntl函数实现的

fcntl 原型

#include<fcntl.h>
int fcntl(int field,int cmd,... /* struct flock * flockptr */);
返回值 若成功依赖于cmd 若出错 返回-1

第三个参数是指向一个flock 结构的指针
{
short l_type;
off_t start;
short l_whence;
off_t l_len;
pid l_pid;
}
希望的锁类型l_type:F_RDLCK,F_WRLCK,F_UNLCK

cmd 的3种类型:
F_GETLK F_SETLK F_SETLKW
F_GETLK 判读flockptr所描述的锁是否会被另一把锁所排斥(阻塞)。如果存在一把锁,它阻止创建由flockptr所描述的锁,则把该现存锁的信息写到flockptr指向的结构中。
                如果不存在这种情况,则除了将l_type设为F_UNLCK外其他不变

F_SETLCK 设置由flockptr所描述的锁。如果试图建立一把读锁或一把写锁,而按上述规则不允许,则fcntl立即出错返回, 此时errno设置为EACESS或EAGAIN 。
                   此命令也清除由flockptr说明的锁(l_type设为F_UNLCK)
                   
F_SETLKW F_SELCK的阻塞版本 不立即出错返回 而是使调用者休眠 如果请求创建的锁可用,或者休眠由信号中断,则该进程被唤醒。
0 0
原创粉丝点击