曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6399|回复: 0
打印 上一主题 下一主题

[文件I/O] 文件区域锁

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-4-22 12:14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创建锁文件这用来控制独占式访问资源( 如串口 )或者一些不常访问的文件是不错的,但对于较大的共享型文件则不太适合。

假如写了一个程序,而这个程序需要其它许多不同的程序对其进行读取操作更新。这里,可能会有一些问题,比如有一个程序连续一段较长的时间里都要访问数据,而其它的程序同时也要对这些数据进行处理。当然不能让好几个程序要一直等到之前那个程序完成了自己的工作后( 甚至一直都会占用着 )才能访问数据,所以这里需要一些协调措施以满足同时访问同一个文件。

对于上述问题,调协的方法是,不能对文件中的数据都由一个程序全盘进行锁定,而是要对一部分数据进行锁定,而其它部分不锁定以能让别的程序可以正常访问。比如一个文件文件分为A,B,C,D 四个部分。程序1 需要访问独占式的访问 B 部分,而其它 3 个部分不需要访问,那么程序1就只需要把 B 部分锁定住即可,让其余部分可以让别的程序可以进行访问。

那么,在 linux 里,有两种方式可以进行这种“区域锁” 的操作,即通过 fcntl()lockf() 函数来实现。

但是,需要注意的是,fcntl() 和 lockf() 函数不能同时混用,因为它们使用了不同的底层实现,所以一直只需要用其中的一个即可!

fcntl() 函数的原型为:
#include <fcntl.h>

int fcntl(int fildes, int command, ...);

细节分析:
http://www.groad.net/bbs/read.php?tid=591&fpage=2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 00:20 , Processed in 0.061249 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表