利用文件句柄进行输入输出

来源:互联网 发布:apk反编译java代码 编辑:程序博客网 时间:2024/04/29 00:11

利用文件句柄进行输入输出
文件句柄定义:程序与外部数据源之间的接口。这里的数据源可以是实际的文件,也可以是其他的输入手段,如:串行设备,网络连接或键盘。
文件句柄不同于标量变量,这一点要牢记。这是一个独立的一种数据类型,文件句柄在符号表typeglob中有它自己的槽。文件句柄是一个结构化的信息集合,用来描述实际的连接。

标准文件句柄:STDIN STDOUT STDERR
STDOUT STDERR的主要区别:STDERR不进行缓冲处理,这样能确保错误能及是被写出。

创建文件句柄:两种方法,一种是open函数,一种是用IO::module(特别是IO::File模块)

以下将具体谈一谈如何创建文件句柄:
open FD "file";
open(FD,"file");
以只读的方式打开文件file
文件的打开方式分为:读,写,添加,读更新,写更新,添加更新;
读方式是缺省的打开方式,符号为<
如:open FD,'<',"file";
open(FD,"<file")
写方式符号为>
添加 >>
读更新 +< 注意点:如果文件不存在的话,这个操作将会失败,如果文件存在,则从文件开始处进行读,同时可以使用写操作,在使用的过程中,可以结合seek函数定位文件指针,
#!/usr/bin/perl
open FD,"+<tabconver1t.pl";
$stdout=select FD;
seek(FD,0,0);
print "print this message in the head of this file\n";
select $stdout;
print "goodbye\n";

这样,tabconver1t.pl中的开始部分的内容就会被print的输出所替代掉了,此中的seek定位指针函数下一部分讲解。

写更新 +> 如果文件不存在的,则先创建,如果文件存在,文件中的内容就会掉失,然后写数据到文件中,同时也可以读后写入的数据。

添加更新 +>> 文件不存在,就创建之,存在可能读,也可以写,写的数据直接添加到文件的结尾部分,当然,我们可以用seek定位文件指针,这样就可以写数据到别的地方了。

关于文件打开方式的使用方面的注意点,最后不要和file结合使用,因为有的文件名中有<,>,+这样的符号,这样可能导致程序误解。因此这个在使用open的时候可以使用三个参数。
如:open MYHANDLE,'<',$file;

打开标准输入和标准输出的小知识。
open FD,'-';
open FD,'<';
打开标准输入。
可以在程序中另以下片段:
$file=get_filename();
open FILE,$file?$file:'-';
如果取文件名失败,这个就从标准输入中取数据。
open MYSTDOUT,'>-';
打开标准输出。
如果打开一个名为"-"的文件时,可以这样:
open FILE,'+<','-';

使用IO::File创建文件句柄

IO::模块家族包括:
IO::Dir IO::File IO::Handle IO::Pipe IO::Seekable IO::Socket
使用IO模快更方便定义接口,但是以消耗系统的性能为代价的。
use IO::File;
$fh=new IO::File;
$fh->open("> myfile");
$fh->autoflush(1);
$fh->print("Message...\n");
$fh->close();