当前位置: 技术问答>linux和unix
文件加锁在实际开发中有什么用?
来源: 互联网 发布时间:2016-09-16
本文导语: 我原本是以为 某文件经fcntl()加上RDLCK锁或者WRLCK锁后,此锁没有解除之前别的进程均不能读写此文件, 但亲自做了实验证明我的想法是错误的, X文件即使被某进程用fcntl()函数给加上RDLCK锁或者WRLCK锁,但别的进程...
我原本是以为
某文件经fcntl()加上RDLCK锁或者WRLCK锁后,此锁没有解除之前别的进程均不能读写此文件,
但亲自做了实验证明我的想法是错误的,
X文件即使被某进程用fcntl()函数给加上RDLCK锁或者WRLCK锁,但别的进程仍可以无任何妨碍的去读写X文件,
我想知道,这种机制在实际的开发中有什么用?
某文件经fcntl()加上RDLCK锁或者WRLCK锁后,此锁没有解除之前别的进程均不能读写此文件,
但亲自做了实验证明我的想法是错误的,
X文件即使被某进程用fcntl()函数给加上RDLCK锁或者WRLCK锁,但别的进程仍可以无任何妨碍的去读写X文件,
我想知道,这种机制在实际的开发中有什么用?
|
文件锁和文件分开的,也就是说,锁这种机制需要应用层来保证:
在一个文件中LOCK之后,
若其他的进程对文件进行ACCESS(read,write),
显然也要fcntl()(而不能直接read(),write(),因为kernel不对这个负责)。
在一个文件中LOCK之后,
若其他的进程对文件进行ACCESS(read,write),
显然也要fcntl()(而不能直接read(),write(),因为kernel不对这个负责)。
|
其实这个在APUE里面已经讲的很清楚了,在系统仅提供建议性锁的情况下,文件锁只有在使用“一致的方法处理记录锁(也即文件锁)”的合作进程间才有效,建议性锁并不能阻止对文件有写权限的任何其他进程对文件进行的写操作。只有在系统提供强制性锁的情况下,内核才会对每一个open、read、和write系统调用进行检查。
这里所谓的“一致的方法”就是说其他进程在对文件操作前也要进行相应的fcntl操作,这样建议性锁才有效。
Linux默认建议性锁,另外也提供强制性锁,不过需要自己打开。
这里所谓的“一致的方法”就是说其他进程在对文件操作前也要进行相应的fcntl操作,这样建议性锁才有效。
Linux默认建议性锁,另外也提供强制性锁,不过需要自己打开。
|
你没有搞清楚fcntl()作用范围。
fcntl()不管是读,或者是写锁,这种锁都是比较比较细致的锁,他的作用范围不是锁定整个文件,
而是只锁定文件的一部分。如果你想彻底锁住该文件。也就是说fcntl锁,都是在一定字节范围内的锁定。
fcntl()不管是读,或者是写锁,这种锁都是比较比较细致的锁,他的作用范围不是锁定整个文件,
而是只锁定文件的一部分。如果你想彻底锁住该文件。也就是说fcntl锁,都是在一定字节范围内的锁定。
|
http://blog.mcuol.com/User/saidi/Article/6500_1.htm
|
至于应用,一个应用程序的多个进程在都需要修改一个数据文件时,这种锁就显的重要了。
多个进程修改的文件区不同时就可以并行执行,有交差时就可以互斥执行,多好啊!
多个进程修改的文件区不同时就可以并行执行,有交差时就可以互斥执行,多好啊!
|
长见识了
|
你想锁整个文件不让别的进程或线程读取,用fcntl()可以,不过你没完全用透这个函数,你锁的只是文件的一部分,你好好参考下fcntl 的参数,如果你想锁,用线程锁和信号量都可以