文件加锁方法——通用锁函数
添加时间: 2006-2-18 2:27:27 作者: CGI教程 阅读次数:164 来源: http://www.d9soft.com
我们一般是对要写的文件进行锁定,是用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();
上下文章:
上一篇文章: 在CGI中使用cookie的简单方法 下一篇文章: 简单的CGI二级域名跳转程序
相关文章:

