- 当多个用户使用、操作一个文件的时候,Linux通常采用的方法是给文件上锁,来避免共享资源产生的竞争的状态。
- 文件锁按功能分为:
- 共享读锁:文件描述符必须读打开 一个进程上了读锁,其他进程也可以上读锁进行读取。
- 独占写锁:文件描述符必须写打开 一个进程上了写锁,其他进程不能上写锁和读锁进行读写操作
- 文件锁按类型分为建议锁和强制性锁。建议性锁要求上锁文件的进程都要检测是否有锁存在,并尊重已有的锁。强制性锁由内核和系统执行的锁。
- fcntl不仅可以实施建议性锁而且可以实施强制性锁。
F_SETLK:设置文件锁 F_GETLK:获得文件锁信息 F_SETLKW: F_SETLK的阻塞版本
flock结构体
- I_type
锁类型,F_RDLCK(共享读锁)、F_WRLCK(独占性写锁)或F_UNLCK(解锁一个区域)
- I_start、I_whence
要加锁或解锁的区域的起始地址,由I_start和I_whence两者决定。
I_start是相对位移量,I_whence则决定相对位移量的起点。
- I_len
表示区域的长度
锁的继承与释放
- 一个进程终止,他所建立的锁全部释放
- 关闭一个文件描述符,此进程对应的文件的所有的锁均释放
- 子进程不继承父进程的锁
- 执行exec以后,新进程可以选择是否继承原来执行进程的锁