当前位置:  技术问答>linux和unix

文件加锁在实际开发中有什么用?

    来源: 互联网  发布时间:2016-09-16

    本文导语:  我原本是以为   某文件经fcntl()加上RDLCK锁或者WRLCK锁后,此锁没有解除之前别的进程均不能读写此文件, 但亲自做了实验证明我的想法是错误的, X文件即使被某进程用fcntl()函数给加上RDLCK锁或者WRLCK锁,但别的进程...

我原本是以为  
某文件经fcntl()加上RDLCK锁或者WRLCK锁后,此锁没有解除之前别的进程均不能读写此文件,
但亲自做了实验证明我的想法是错误的,
X文件即使被某进程用fcntl()函数给加上RDLCK锁或者WRLCK锁,但别的进程仍可以无任何妨碍的去读写X文件,
我想知道,这种机制在实际的开发中有什么用?

|
文件锁和文件分开的,也就是说,锁这种机制需要应用层来保证:
在一个文件中LOCK之后,
若其他的进程对文件进行ACCESS(read,write),
显然也要fcntl()(而不能直接read(),write(),因为kernel不对这个负责)。


|
其实这个在APUE里面已经讲的很清楚了,在系统仅提供建议性锁的情况下,文件锁只有在使用“一致的方法处理记录锁(也即文件锁)”的合作进程间才有效,建议性锁并不能阻止对文件有写权限的任何其他进程对文件进行的写操作。只有在系统提供强制性锁的情况下,内核才会对每一个open、read、和write系统调用进行检查。
这里所谓的“一致的方法”就是说其他进程在对文件操作前也要进行相应的fcntl操作,这样建议性锁才有效。
Linux默认建议性锁,另外也提供强制性锁,不过需要自己打开。

|
你没有搞清楚fcntl()作用范围。


fcntl()不管是读,或者是写锁,这种锁都是比较比较细致的锁,他的作用范围不是锁定整个文件,

而是只锁定文件的一部分。如果你想彻底锁住该文件。也就是说fcntl锁,都是在一定字节范围内的锁定。

|
http://blog.mcuol.com/User/saidi/Article/6500_1.htm

|
至于应用,一个应用程序的多个进程在都需要修改一个数据文件时,这种锁就显的重要了。
多个进程修改的文件区不同时就可以并行执行,有交差时就可以互斥执行,多好啊!

|
长见识了

|
你想锁整个文件不让别的进程或线程读取,用fcntl()可以,不过你没完全用透这个函数,你锁的只是文件的一部分,你好好参考下fcntl 的参数,如果你想锁,用线程锁和信号量都可以

    
 
 

您可能感兴趣的文章:

  • 编程在软盘上创建文件,为什么实际的文件名总不能大于8个字符呢?
  • redhat9.0中用loacte搜出许多实际上已经被删除的文件,却见不到刚建立的文件,这是怎么回事?
  • 如何查看LINUX的.A文件的实际内容,请问各位高手,有办法吗?
  • 开发板串口与实际内核中的串口文件的对应关系怎么回事?谢谢帮忙
  • 虚拟机中安装的系统与实际系统文件的拷贝问题?
  • 如何隐藏下载文件的实际地址,用id来取代地址
  • Linux里面,文件的拥有者应该是肯定会拥有R,W,X呀, 为什么实际上不是这样?
  • 大家实际测的FAT16文件系统写Nand Flash速率一般为多大?
  • stat函数为什么有时不能正确获取文件实际大小
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 求内核开发,文件系统开发相关资料。。。
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • 我开发一个GTk的应用程序,其中需要用到QT的一个头文件,应该如何引入该头文件?
  • 文件系统开发库 FUSE
  • 求助,关于开发板的linux文件问题!
  • 如何将自己开发的类打包(生成.jar文件)
  • 用jbuilder开发的程序,其中用到了xylayout,将应用程序做成了jar文件,运行jar文件时,提示错误。请大家多帮忙
  • DWG 文件开发包 LibreDWG
  • img文件系统如何写入开发板
  • 驱动开发的头文件问题
  • 十万火急,虚拟机下无法通过NFS挂载开发板的文件系统。
  • 菜鸟请问(Red Hat Linux)里面的用于开发窗口程序的头文件是什么,谢谢
  • linux开发 文件扩展名
  • 疑问:开发板不能mount主机的文件?
  • 用tftp从虚拟机(linux)中下载文件到友善之臂的mini2440开发板问题
  • 用JB5如何编译执行JDK开发的java文件
  • linux下,开发文件的上传与下载
  • (求救!)请问怎样将SDK开发的工程文件用JB(6.0)载入?
  • 帮助我系统的致命点:我开发了一套“文件管理系统”,(jsp语言,resin服务器)但
  • tftp 传文件到开发板
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • HTML教程 iis7站长之家
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能
  • vi 中编辑两个文件,怎样从其中一个文件拷一段内容到另一个文件中。(同时打开两个文件)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 怎么统计一个文件夹下有多少个文件(不包括文件夹)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • MyEclipse如何查看和设置文件编码格式相关操作
  • linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • 设置sharepoint 2010文档库中的 pdf文件在浏览器中访问的打开方式
  • 如何删除某个目录下除了指定文件夹之外的所有文件和文件夹


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3