Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1450807
  • 博文数量: 239
  • 博客积分: 5909
  • 博客等级: 大校
  • 技术积分: 2715
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:19
文章分类

全部博文(239)

文章存档

2014年(4)

2013年(22)

2012年(140)

2011年(14)

2010年(59)

我的朋友

分类:

2010-07-28 14:26:04

比较简单的方式有:
open FH, "filename";
open FH, "< filename";
open FH, "> filename";
open FH, ">>filename";
其中,第一种和第二种方式都是代表读文件,没有区别;第三种和第四种方式代表的是写文件,但区别是第三种是覆盖的方式而第四种是追加的方式。当打开一个文件句柄时记得close FH。

当对一个文件同时做多种读写操作时,会出现混乱。而Perl提供了一种可移植的锁定接口flock函数。
锁分为两种:共享锁(LOCK_SH标志)和排它锁(LOCK_EX标志)。共享锁多用于读文件,排它锁多用于写文件。但flock只是实现了劝告性的锁定,不阻止其它进程对文件的操作。只有所有用户都使用文件锁机制时,你才能安全访问一个文件。

flock缺省是阻塞的。
读文件例子:

use Fcntl wq(:DEFAULT :flock);
open (FH, "< filename") or die "can't open filename: $!";
flock(FH, LOCK_SH) or die "can't lock filename: $!";

#read from FH


如果是请求一个非阻塞锁:

flock(FH, LOCK_FH | LOCK_NB) or die "can't lock filename: $!";


锁都是针对文件句柄,不针对文件名。
如果在写文件时使用排它锁,需要使用sysopen打开文件,如:

use Fcntl qw(:DEFALUT :flock);
sysopen(FH, "filename", O_WRONLY | O_CREAT) or die "can't open filename:$!";
flock(FH, LOCK_EX) or die "can't lock filename:$!";


不能锁住一个没有打开的文件,也无法对多个文件使用一个锁。但可以用一个独立的文件充当信号灯,通过该文件中使用共享和排它锁来提供对其他文件的访问。
阅读(2900) | 评论(0) | 转发(0) |
0

上一篇:说说perl语言

下一篇:Perl中的环境变量%ENV

给主人留下些什么吧!~~