首页 > 代码库 > 记录锁
记录锁
1 记录锁的功能:
当一个进程正在读或修改文件的某一区域时,可以阻止其他进程修改同一文件区
2 相关数据结构:
struct flock{ short l_type;/* F_RDLCK,F_WRLCK,F_UNLCK */ off_t l_start;/* offset in bytes,relative to l_whence */ short l_whence;/* SEEK_SET,SEEK_CUR,SEEK_END */ off_t l_len; /* length,in bytes;0 means lock to EOF */ pid_t l_pid;/* returned with F_GETLK */}
3 相关函数:
#include <fcntl.h>int fcntl(int filedes,int cmd,.../* struct flock *flockptr */)
F_GETLK:判断flockptr是否会被其他记录锁排斥,会则将排斥该锁的锁信息填充到flockptr,不排斥则将l_type设置为F_UNLCK
F_SETLK:尝试建立flockptr描述的文件锁,非阻塞
F_SETLKW:建立文件锁的阻塞版本
4 隐含继承与释放:
1)记录锁与文件了进程两方面相关,进程终止则该进程建立的所有记录锁释放,文件描述符关闭则该文件上所有记录锁释放
2)fork子进程不继承父进程的记录锁(父子进程如果拥有相同的记录锁,记录锁就失去意义了)
3)exec后,新程序继承原程序的记录锁
5 系统中的实现
对任意一个文件描述符执行关闭操作都会释放文件上的所有记录锁(为什么??)
记录锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。