博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助 

Linux

月光如水
viviecho.cublog.cn
关于作者  
姓名:  *****
性别:  女
年龄:  24
位置:  SH
职业:  *****


我的分类  




文件加锁方法--通用锁函数
假设你编写了一个非常出色的Perl程序。比如说一个计数器,那么可能有许多人同时运行你的程序。它运行得如此频繁,以致于你的程序的许多实例互相重叠 了。对一个文件,一次只能进行一个写工作,所以在写的同时,要对文件加锁,防止别的用户也进行写操作。如果你使用Windows 95或Windows 98计算机,那就不必了,因为Windows系统回自动对文件加锁的,如果你是使用Windows NT或UNIX的话,就要对文件加锁了。

  我们一般是对要写的文件进行锁定,是用flock函数:

  use Fchtl qw(:flock);

  flock (FILEHANDLE,Lock_EX);

   但是,在试图读写的文件上加锁是很复杂的。由于打开文件句柄和锁定文件至少需要两个步骤的进程,因此设置文件锁就会带来一些问题,首先必须打开文件,然 后才能给文件加锁。如果用open(FH,“>filename”),然后用flock函数给文件加了锁,那么在你获得该锁之前,你已经修改了该文 件(用>对文件截尾了)。通过截尾你可能修改了该文件,而其他进程则对该文件设置了锁。

  若要解决这个问题,就要建个标识文件,它没有什么重要的内容,凡是对该文件拥有锁的人,均能处理该文件。我们可以对这个标识文件进行加锁、解锁,在加锁和解锁之间对你想要读写的文件进行操作。代码如下:

  use Fcntl qw(:flock);

  sub get_lock {

  open(SEM,">Temp.tmp") or die "Can't create semaphore: $!"; #Temp.tmp就是个标识文件

  flock(SEM,LOCK_EX) or die "Lock failed: $!":

  }

  sub release_lock {

  close(SEM);

  }

  #上面这两个函数就是通用锁函数

  get_lock();

  ……

  ……

  …… #读写文件

  release_lock()

 发表于: 2008-06-27,修改于: 2008-06-27 16:02
 已浏览59次,有评论0条
推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:5.99446

京ICP证041476号