Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104946
  • 博文数量: 16
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 216
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 14:29
文章分类

全部博文(16)

文章存档

2014年(1)

2010年(7)

2009年(8)

我的朋友

分类:

2010-02-24 17:55:05

之前写的东西,忘记保存,结果重新写。 如果有开心网那样,可以自动保存就好了。
 
句柄handle 分为文件句柄和目录句柄,文件句柄实际上包含文件,进程和套接字的读写。
 
文件句柄的操作步骤
open(FD,"filename");
@lines=;
close(FD);
 
open()由以下几个用法
open(FD,"> filename") 写数据进文件
open(FD,">> filename") 追加数据进文件
open(FD,"filename") 读文件
open(FD,"process |") 读进程结果
open(FD,"| to process") 往进程中写数据,不过对WINDOWS系统写会有问题
 
$line= 获取起始行
如果要遍历整个文件
while (defined $line=) {}
 
@lines= 将整个文件放入lines数组中
 
可以使用FileHandle包,可以避免变量覆盖的现象。
use FileHandle;
$fileHandleName= new FileHandle("filename");
$line=<$fileHandleName>;
 
close() 关闭文件句柄
实际上,perl会在句柄超出范围或程序结束时,自动关闭。
 
写入操作
print (@arrayName) 或 print FILEHANDLENAME (@arrayName)
 
也可以用以下方式来写入
foreach $line(@arrayName)
{
    print FILEHANDLENAME "$line\n";
}
 
使用$line的好处是,程序在运行时,会将$line的值立即放入文件中。而使用@arrayname的方式会先放入缓存中累积,如果出现进程中断,会倒是输出数据丢失。如果要避免这个问题出现可以把$|设置为1
 
对二进制文件的读写
使用binmode FILEHANDLE
具体实例
open(IN_FD,"test.gif");
open(OUT_FD," > copy.gif");
binmode(IN_FD);
binmode(OUT_FD);
 
while(read(IN_FD,$buffer,1024){
     print OUT_FD,$buffer;
}
 
close(IN_FD);
close(OUT_FD);
 
 
select(FILEHANDLE) 用于设定输出的默认句柄
在select指定句柄后,随后输出在默认情况下,会输出到指定的句柄
 
open(FD,"> newfile");
select(FD);
print "test"; #将test添加到newfile中
select(STDOUT);
print "ok";  #将ok输出到屏幕
 
flock()文件加锁,只适用unix,其他系统或网络文件可能无效
1 创建共享锁  2 创建排他锁  4 创建非阻塞锁 8 排除当前锁 
 
open(FD,">> inputfile");
flock(FD,2);
print FD "test string";
flock(FD,8);
close(FD);
 
 
seek()使用,可以让文件指针指向到指定位置
seek(FILEHANDLE,BYTEOFFSET,FILEPOSITION)
BYTEOFFSET 用于位移值,可以是正负值
FILEPOSITION 位置值,0表示到文件开头,1文件中的当前位置,2文件末尾位置
 
tell()返回文件中当前字节的位置
 
打开文件进行读写的操作
open(FD,"+
open(FD,"+>filename") 先写后读
open(FD,"+>>filename") 先追加后读
 
 
 
 
 
 
阅读(5284) | 评论(0) | 转发(0) |
0

上一篇:linux 小指令

下一篇:vi 指令技巧

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