linux 文件读写锁,Unix环境文件读写锁

1简介:

做个假设,如果有多个进程,共同编辑一个文件,那个这个文件安最后的结果是什么?在普通的Unix环境下,并没有限制多个进程共同读写一个文件。但是,如果这种情况出现在数据库中,怎么办。数据库要严格限制数据的一致性。

记录锁(Record locking)是用来描述一个进程限制其他进程来修改其在文件读写部位数据的概念。其实记录(Record)这个概念并不准确,因为在Unix下,任何文件只是字节流。

记录锁的实现方式有多种,早期的Berkeley系列仅仅用flock方法,这个方法锁住整个文件,不是一个区域。System V Release 3通过fcntl方法,增加了记录锁的概念。这个方法提供达到整个文件安,小道一个字节的记录锁。flock建立在fcntl之上,提供了一个简单的接口。

2 fcntl函数原型:

#include

int fcntl(int filedes, int cmd, ... /* struct flock *flockptr */ );

Returns: depends on cmd if OK (see following), 1 on error

fileds是要锁定的文件描述符

对于cmd参数,可以使用的有: F_GETLK, F_SETLK, or F_SETLKW

第三个参数(flockptr),指向一个flock结构指针,flock的结构如下:

struct flock

{

short l_type;/*F_RDLCK, F_WRLCK, or F_UNLCK*/

off_t l_start;/*相对于l_whence的偏移值,字节为单位*/

short l_whence;/*从哪里开始:SEEK_SET, SEEK_CUR, or SEEK_END*/

off_t l_len;/*长度, 字节为单位; 0 意味着缩到文件结尾*/

pid_t l_pid;/*returned with F_GETLK*/

};

结构体描述

锁类型: F_RDLCK(读共享锁), F_WRLCK(写互斥锁),和F_UNLCK(对一个区域解锁)

锁开始: 锁位置(l_whence),相对于l_whence要锁或者解锁的区域开始位置(l_start)

锁长度: 要锁的长度,字节计数(l_len)

    锁拥有者:记录锁的拥有进程ID,这个进程可以阻塞当前进程,仅F_GETLK形式返回0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值