通过fcntl函数给文件上锁

在Linux中,fcntl函数可用于对文件施加建议性锁、强制锁和记录锁,以防止多个进程间的资源竞争。本文介绍了fcntl的用法,包括F_GETLK、F_SETLK和F_SETLKW等操作,以及结构体flock的使用,通过示例展示了如何给文件加锁和解锁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当多个进程共同使用,操作一个文件的时候,可以通过采用给文件上锁的的方法,来避免共享的资源产生竞争的状态。

 

在linux中,实现文件上锁的函数有lock和fcntl。

 

fcntl可以对文件施加建议性锁,强制锁和记录锁。

 

 

1.建议锁又称协同锁。对于这种类型的锁,内核只是提供加减锁以及检测是否加锁的操作,但是不提供锁的控制与协调工作。也就是说,如果应用程序对某个文件进行操作时,没有检测是否加锁或者无视加锁而直接向文件写入数据,内核是不会加以阻拦控制的。因此,建议锁,不能阻止进程对文件的操作,而只能依赖于大家自觉的去检测是否加锁然后约束自己的行为。

2.强制锁,是OS内核的文件锁。每个对文件操作时,例如执行openreadwrite等操作时,OS内部检测该文件是否被加了强制锁,如果加锁导致这些文件操作失败。也就是内核强制应用程序来遵守游戏规则。

3.记录锁,即对文件的一部分进行加锁操作。记录锁又可分为读取锁和写入锁,其中读取锁又称为共享锁,它能够使多个进程都能在文件的同一部分建立读取锁;而写入锁又称排斥锁,在任何时刻只能有一个进程在文件的某个部分上建上写入锁。当然,在文件的同一部分不能同时建立读取锁和写入锁。

 

fcntl函数语法:

 #include <fcntl.h>

int fcntl(int fd,int cmd,struct flock * lock);  

fcntl()用来操作文件描述符的一些特性。参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令。  

有以下几种情况:  

F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文件描述词,并且复制参数fd的文件描述词。执行成功则返回新复制的文件描述词。请参考dup2()。

F_GETFD取得close-on-exec旗标。若此旗标的FD_CLOEXEC位为0,代表在调用exec()相关函数时文件将不会关闭。  

F_SETFD 设置close-on-exec 旗标。该旗标以参数a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值