flock(),lockf(),fcntl()超全整理,文件锁,c语言

flock(),lockf(),fcntl()超全整理,文件锁,c语言

ID:6031137

大小:36.21 KB

页数:10页

时间:2017-12-31

flock(),lockf(),fcntl()超全整理,文件锁,c语言_第1页
flock(),lockf(),fcntl()超全整理,文件锁,c语言_第2页
flock(),lockf(),fcntl()超全整理,文件锁,c语言_第3页
flock(),lockf(),fcntl()超全整理,文件锁,c语言_第4页
flock(),lockf(),fcntl()超全整理,文件锁,c语言_第5页
资源描述:

《flock(),lockf(),fcntl()超全整理,文件锁,c语言》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、linxuc语言fcntl函数和flock函数区别说明flock和fcntl都有锁的功能,但他们还有一点小小的区别:1.flock只能加全局锁,fcntl可以加全局锁也可以加局部锁。2.当一个进程用flock给一个文件加锁时,用另一个进程再给这个文件加锁,它会阻塞或者也可以返回加锁失败(可以自己设置)。3.当一个进程用fcntl给一个文件加锁时,用另一个进程去读或写文件时必须先获取加锁的信息,然后在给这个文件加锁。3.当给一个文件加fcntl的独占锁后,再给这个文件加flock的独占锁,其会进入阻塞状态。4.当给一个文件加f

2、lock的独占锁后,用fcntl去获取这个锁信息获取不到,再用fcntl仍然可以给文件加锁。/*******************************************************************/ linux下C语言中的flock函数用法.  表头文件 #include  定义函数 intflock(intfd,intoperation);  函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整

3、个文件,无法锁定文件的某一区域。  参数 operation有下列四种情况:  LOCK_SH建立共享锁定。多个进程可同时对同一个文件作共享锁定。  LOCK_EX建立互斥锁定。一个文件同时只有一个互斥锁定。  LOCK_UN解除文件锁定状态。  LOCK_NB无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX做OR(

4、)组合。  单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。  返回值 返回0表示成功,若有错误则返回-1,错误代码存于

5、errno。 flock只要在打开文件后,需要对文件读写之前flock一下就可以了,用完之后再flock一下,前面加锁,后面解锁。其实确实是这么简单,但是前段时间用的时候发现点问题,问题描述如下:一个进程去打开文件,输入一个整数,然后上一把写锁(LOCK_EX),再输入一个整数将解锁(LOCK_UN),另一个进程打开同样一个文件,直接向文件中写数据,发现锁不起作用,能正常写入(我此时用的是超级用户)。google了一大圈发现flock不提供锁检查,也就是说在用flock之前需要用户自己去检查一下是否已经上了锁,说明白点就是读

6、写文件之前用一下flock检查一下文件有没有上锁,如果上锁了flock将会阻塞在那里(Anattempttolockthefileusingoneofthesefiledescriptorsmaybedeniedbyalockthatthecallingprocesshasalreadyplacedviaanotherdescriptor )./**********************************************************/ linxuc语言fcntl函数说明功能描述:根据文件描述词来操

7、作文件的特性。 文件控制函数        fcntl--filecontrol头文件:        #include;         intfcntl(intfd,intcmd);         intfcntl(intfd,intcmd,longarg);         intfcntl(intfd,intcmd,structflock*lock); [描述]           Fcntl()针对(文件)描述符提供控制.参数fd是被参数cmd操作(如下面的描述)的描述符.           

8、 针对cmd的值,fcntl能够接受第三个参数intargfcntl函数有5种功能: 1.复制一个现有的描述符(cmd=F_DUPFD). 2.获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD). 3.获得/设置文件状态标记(cmd=F_GETFL或F_SETFL). 4.获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN). 5.获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW).    cmd值:            F_DUPFD            返

9、回一个如下描述的(文件)描述符:                           o            最小的大于或等于arg的一个可用的描述符                           o            与原始操作符一样的某对象的引用              

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。