fcntl和select函数彻底搞明白

fcntl和select函数彻底搞明白

ID:16689569

大小:35.00 KB

页数:6页

时间:2018-08-23

fcntl和select函数彻底搞明白_第1页
fcntl和select函数彻底搞明白_第2页
fcntl和select函数彻底搞明白_第3页
fcntl和select函数彻底搞明白_第4页
fcntl和select函数彻底搞明白_第5页
资源描述:

《fcntl和select函数彻底搞明白》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、fcntl和select函数彻底搞明白第一、fcntl函数详细使用      fcntl有强大的功能,它能够复制一个现有的描述符,获得/设置文件描述符标记,获得/设置文件状态标记,获得/设置异步I/O所有权,获得/设置纪录锁。当多个用户共同使用,操作一个文件的情况,Linux通常采用的方法就是给文件上锁,来避免共享资源产生竞争的状态。fcntl文件锁有两种类型:建议性锁和强制性锁        建议性锁是这样规定的:每个使用上锁文件的进程都要检查是否有锁存在,当然还得尊重已有的锁。内核和系统总体上都坚持不使用建议性锁,它们依靠程序员遵守这个规定。    

2、    强制性锁是由内核执行的。当文件被上锁来进行写入操作时,在锁定该文件的进程释放该锁之前,内核会阻止任何对该文件的读或写访问,每次读或写访问都得检查锁是否存在。        使用fcntl文件锁进行I/O操作必须小心:进程在开始任何I/O操作前如何去处理锁,在对文件解锁前如何完成所有的操作,是必须考虑的。如果在设置锁之前打开文件,或者读取该锁之后关闭文件,另一个进程就可能在上锁/解锁操作和打开/关闭操作之间的几分之一秒内访问该文件。当一个进程对文件加锁后,无论它是否释放所加的锁,只要文件关闭,内核都会自动释放加在文件上的建议性锁(这也是建议性锁和强

3、制性锁的最大区别),所以不要想设置建议性锁来达到永久不让别的进程访问文件的目的(强制性锁才可以)^_^;强制性锁则对所有进程起作用。      可以用fcntl函数改变一个已打开的文件的属性,可以重新设置读、写、追加、非阻塞等标志(这些标志称为FileStatusFlag),而不必重新open文件。     #include     #include     intfcntl(intfd,intcmd);     intfcntl(intfd,intcmd,longarg);     intfcntl(intfd,i

4、ntcmd,structflock*lock);这个函数和open一样,也是用可变参数实现的,可变参数的类型和个数取决于前面的cmd参数。文件锁包括了建议性锁和强制性锁。建议性锁要求每个上锁的文件的进程都要检查是否有锁存在,并且尊重已有的锁,在一般情况下,内核和系统都不使用建议性锁。强制性锁是由内核执行的锁,当一个文件被上锁进行读写操作的时候,内核将阻止其他任何文件对其进行读写操作。每次读写操作都要检查是否有锁存在。otherstaffoftheCentre.Duringthewar,ZhuwastransferredbacktoJiangxi,andD

5、irectorofthenewOfficeinJingdezhen,JiangxiCommitteeSecretary.Startingin1939servedasrecorderoftheWestNorthOrganization,SecretaryoftheSpecialCommitteeAfterthevictoryofthelongMarch,hehasbeentheNorthwestOfficeoftheFederationofStateenterprisesMinister,ShenmufuguSARmissions,DirectorofNi

6、ngxiaCountypartyCommitteeSecretaryandrecorderoftheCountypartyCommitteeSecretary,Ministersand在Linux中实现上锁的函数有lock()和fcntl()。lock()用于对文件施加建议性锁fcntl()用于对文件施加建议性锁和强制性锁都行。同时还可以对文件某一条纪录进行上锁,也就是记录锁。记录锁分为读取锁(共享锁,它能够使多个进程都能在文件的同一部分建立读取锁)和写入锁(排斥锁,在任何时刻只能有一个进程在文件的某部分建立写入锁。)。fcntl函数原型#include

7、#include#includeintfcntl(intfd,  //文件描述符         intcmd,//不同的命令         structflock*lock)//设置记录锁的具体状态cmd取值:F_DUPFD  复制文件描述符F_GETFD  获得fd的close-on-exec标志F_SETFD  设置close-on-exec标志F_GETFL  获得open设置标志F_SETFL  设置lock描述的标志F_GETLK  测试该锁是否被另外一把锁排斥F_SETLKW

8、如果存在其他锁,则调用进程睡眠,如果捕捉到信号则睡眠中断F_GETOWN检索收到

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

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

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