《Perl编程24学时教程》笔记第15课 perl程序的运行性能

发布时间:2020-11-07编辑:脚本学堂
本文分享《Perl编程24学时教程》笔记第15课时的内容,介绍了perl程序的运行性能的相关知识,有需要的朋友参考下。

第15课时  了解程序的运行性能

一、DBM文件
dbmopen(hash,filename,mode),将哈希结构与DBM文件连接起来。
filename实际上在硬盘上创建两个文件,即filename.pag和filename.dir。
mode指对两个文件的访问许可权,在Window中使用0666即可。
dbmclose(%hash),断开哈希结构与DBM文件的连接。

1,重点内容
关键字和数据的长度受限制,之和在1024字符左右。
运行dbmopen,之前的哈希结构中的值均丢失。
运行dbmclose之后,哈希结构中的值均丢失。

2,遍历与DBM文件相关联的哈希结构
遍历大的哈希结构,可以用($key,$value)=each(%hash)。

二、随机访问文件
1,打开文件进行读写操作
 

复制代码 代码示例:
open命令           读   写   附加   文件不存在就创建   截断现有数据
open(F,"<file")    是   否   否      否                  否
open(F,">file")    否   是   否      是                  是
open(F,">>file")   否   是   是      是                  否
open(F,"+<file")   是   是   否      否                  否
open(F,"+>file")   是   是   否      是                  是
open(F,"+>>file")  是   是   是      是                  是

2,在读写文件中移动
seek函数,移动指针到文件的指定位置,第一个参数是文件句柄,第二个参数是想寻找的位移。0文件开始处,1文件当前位置,2文件结尾。
tell函数,返回文件中的当前读指针的位置。

三、锁定文件
竞态条件要求锁定文件,以解决可能出现的问题。

1,锁定UNIX和NT下的文件
flock( FILEHANDLE, lock_type ),提供诱导式锁定机制,第一个参数文件句柄,第二个参数锁的类型,锁定成功返回真。
use Fcntl qw(:flock),使用符号名作为lock_type,而不是数字。
文件锁有两种:公用锁和专用锁,读文件时用公用锁,写文件时用专用锁。
 

lock_type可使用的值
lock_SH,在文件上设置公用锁,另一个进程有该文件的专用锁,flock函数会暂停运行,直到锁被清除,然后再取出该文件的公用锁。
lock_EX,对已打开的文件设置专用锁,另一个进程有该文件的锁,flock函数会暂停运行,直到锁被清除。
lock_UN,释放一个锁。
 

必须打开一个文件,才能给文件加锁。
通用锁函数
 

复制代码 代码示例:
use Fcntl qw(:flock);
my $semaphore_file='/tmp/sample.sem';
sub get_lock {
 open(SEM,'>$semaphore_file') || die "Cannot create semaphore:$!";
 flock(SEM,LOCK_EX) || die "Lock failed:$!";
}
sub release_lock {
 close(SEM);
}

2,Windows95和Windows98下的加锁问题
Windows95和Windows98不需要对文件加锁,操作系统每次只支持一个用户进行文件操作。

3,其他使用文件锁的问题
更多信息参考perlfaq5的文档。