- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
fcntl和select函数彻底搞明白第一、fcntl函数详细使用??????
fcntl有强大的功能,它能够复制一个现有的描述符,获得/设置文件描述符标记,获得/设置文件状态标记,获得/设置异步I/O所有权,获得/设置纪录锁。
当多个用户共同使用,操作一个文件的情况,Linux通常采用的方法就是给文件上锁,来避免共享资源产生竞争的状态。
fcntl文件锁有两种类型:建议性锁和强制性锁???????? 建议性锁是这样规定的:每个使用上锁文件的进程都要检查是否有锁存在,当然还得尊重已有的锁。内核和系统总体上都坚持不使用建议性锁,它们依靠程序员遵守这个规定。???????? 强制性锁是由内核执行的。当文件被上锁来进行写入操作时,在锁定该文件的进程释放该锁之前,内核会阻止任何对该文件的读或写访问,每次读或写访问都得检查锁是否存在。
???????? 使用fcntl文件锁进行I/O操作必须小心:进程在开始任何I/O操作前如何去处理锁,在对文件解锁前如何完成所有的操作,是必须考虑的。如果在设置锁之前打开文件,或者读取该锁之后关闭文件,另一个进程就可能在上锁/解锁操作和打开/关闭操作之间的几分之一秒内访问该文件。当一个进程对文件加锁后,无论它是否释放所加的锁,只要文件关闭,内核都会自动释放加在文件上的建议性锁(这也是建议性锁和强制性锁的最大区别), 所以不要想设置建议性锁来达到永久不让别的进程访问文件的目的(强制性锁才可以)^_^;强制性锁则对所有进程起作用。
?????? 可以用fcntl 函数改变一个已打开的文件的属性,可以重新设置读、写、追加、非阻塞等标志(这些标志称为File StatusFlag),而不必重新open 文件。????? #include unistd.h????? #include fcntl.h????? int fcntl(int fd, int cmd);????? int fcntl(int fd, int cmd, long arg);????? int fcntl(int fd, int cmd, struct flock *lock);这个函数和open 一样,也是用可变参数实现的,可变参数的类型和个数取决于前面的cmd 参数。文件锁包括了 建议性锁 和 强制性锁。 建议性锁要求每个上锁的文件的进程都要检查是否有锁存在,并且尊重已有的锁,在一般情况下,内核和系统都不使用建议性锁。 强制性锁是由内核执行的锁,当一个文件被上锁进行读写操作的时候,内核将阻止其他任何文件对其进行读写操作。每次读写操作都要检查是否有锁存在。 在Linux中实现上锁的函数有lock()和fcntl()。 lock()用于对文件施加建议性锁 fcntl()用于对文件施加建议性锁和强制性锁都行。同时还可以对文件某一条纪录进行上锁,也就是记录锁。 记录锁分为 读取锁(共享锁,它能够使多个进程都能在文件的同一部分建立读取锁) 和 写入锁(排斥锁,在任何时刻只能有一个进程在文件的某部分建立写入锁。)。 fcntl函数原型 #includesys/types.h #includeunistd.h #includefcntl.h int fcntl(int fd,?? //文件描述符 ????????? int cmd , //不同的命令 ????????? struct flock *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 如果存在其他锁,则调用进程睡眠,如果捕捉到信号则睡眠中断 F_GETOWN 检索收到的SIGIO和SIGURG信号的进程号或者进程组号 F_SETOWN 设置进程号或进程组号 这里的lock结构体如下: struct flock { ??? short l_type;?? /*F_RDLCK(读取锁),F_WRLCK(写入锁),F_UNLCK(解锁)*/ ??? off_t l_start; /*相对偏移量(字节)*/ ??? short l_whence; /*SEEK_SET ,SEEK_CUR ,SEEK_END */ ??? off_t l_len;??? /*加锁区域长度*/ ??? pid_t l_pid; } 成功:0 出错:-1 提示:如果加锁整个文件通常的方法是将l_star
您可能关注的文档
- DoubledeckerBuses双层巴士.doc
- Drills中考英语复习资料.doc
- DSP图像处理无线传输硕士论文.doc
- DVB-TCOFDM和ATSC80VSB两种数字电视地面广播传播系统的比较.doc
- DV使用注意事项22招9.doc
- DZL29产品设计说明书.doc
- E.T外星人故事梗概.doc
- e90中文说明书2008完整版.doc
- EclipseWorkbench点滴.doc
- EDI实训之EDI实验1.doc
- 中国国家标准 GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南.pdf
- 《GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南》.pdf
- 中国国家标准 GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 中国国家标准 GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件.pdf
- 中国国家标准 GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 《GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件》.pdf
- 《GB/Z 44938.1-2024机械电气安全 第1部分:用于保护人员安全的传感器》.pdf
- 中国国家标准 GB/T 21551.3-2024家用和类似用途电器的抗菌、除菌、净化功能 第3部分:空气净化器的特殊要求.pdf
最近下载
- 奥数奶茶背后的秘密统计综合应用课件三年级上册数学苏教版.pptx
- 一次性使用可视气管插管产品技术要求完整版2022年新版.pdf
- 2025云南省普洱市搬迁安置办公室招聘劳务派遣人员(1人)笔试备考题库及答案解析.docx VIP
- Unit4 Journey across a vast land (直击高考+写作指导+素材宝库+实战演练)-【同步作文课】高二英语单元写作深度指导(人教版2019选择性必修第二册).docx VIP
- 大学生就业指导(第4版)PPT全套完整教学课件.pptx
- 陕西专升本 英语 基础高频词.pdf VIP
- 桥博问题整理.pdf VIP
- 中国华能集团有限公司供应商管理实施细则(华能制度[2019]).doc
- 学校财务部工作总结PPT.pptx
- 2024年保安员(初级)证考试题库(附答案).pdf VIP
文档评论(0)