12perl文件系统

上传人:第*** 文档编号:48821639 上传时间:2018-07-20 格式:PPT 页数:49 大小:257.50KB
返回 下载 相关 举报
12perl文件系统_第1页
第1页 / 共49页
12perl文件系统_第2页
第2页 / 共49页
12perl文件系统_第3页
第3页 / 共49页
12perl文件系统_第4页
第4页 / 共49页
12perl文件系统_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《12perl文件系统》由会员分享,可在线阅读,更多相关《12perl文件系统(49页珍藏版)》请在金锄头文库上搜索。

1、Perl语言程序设计文件系统操作系统中的文件为数据提供了一个非常 方便的存储方式。操作系统为数据提供了一 个名字(即文件名)和一个组织结构,这样 你就可以在以后找到你要的数据。这个组织 结构称为文件系统。然后你的文件系统再将 文件分成各个组,称为目录,有时也称为文 件夹。这些目录能够存放文件或其他目录。P e r l允许你访问这个组织结构,修改它 的组织方法,并可查看关于文件的各种信息。 P e r l用于这些操作的函数全部源自u n i x操作系 统,但是在P e r l运行的任何操作系统下,这些 函数大都能够很好地运行。P e r l的文件系统的 操作函数是可以移植的,也就是说,如果你使用

2、 P e r l的函数对你的文件进行操作并查询你的文 件,那么在 P e r l支持的任何操作系统下,运行 你的代码都是没有问题的,只要目录结构相类似 。主要内容:文件输入/输出函数1、基本I/O函数1)open函数2)用open重定向输入3)文件重定向4)指定读写权限5)close函数6)print, printf和write函数 7)select函数8)eof函数9)间接文件变量2、跳过和重读数据3、系统读写函数4、用getc读取字符5、用binmode读取二进制文件目录处理函数1、mkdir2、chdir3、opendir4、closedir5、readdir6、telldir7、see

3、kdir8、rewinddir9、rmdir文件属性函数1、文件重定位函数2、链接和符号链接函数3、文件许可权函数4、其他属性函数使用DBM文件一、文件输入/输出函数本节讲述从文件中读取信息和向文件写入信 息的内置库函数。 1、基本I/O函数一些I/O函数在前面的已有讲过,如nopen:允许程序访问文件 nclose:终止文件访问 nprint:文件写入字符串 nwrite:向文件写入格式化信息 nprintf:格式化字符串并输出到文件这里简单回顾一下,再讲一些前面未提到的函数。1) open函数open函数将文件变量与某文件联系起来,提供访问 文件的接口,例如:open(MYVAR, “/u

4、/file”); 如果文 件打开成功,则返回非零值,否则返回零。缺省地, open打开文件用以读取其内容;若想打开文件以写入内容,则在文件名前加个大 于号“”:open(MYVAR, “/u/file“); 若想向已有的文件末尾添加内容用两个大于号 “”:open(MYVAR, “/u/file“); 若想打开文件作为数据导向的命令,则在命令前 加上管道符(|):open(MAIL, “|mail dave“);2) 用open重定向输入可以把打开的文件句柄用作向程序输入数据 的命令,方法是在命令后加管道符(|),如:open(CAT, “cat file*|“);对open的调用运行命令ca

5、t file* ,此命令创 建一个临时文件,这个文件的内容是所有以file 打头的文件的内容连接而成,此文件看作输入文 件,可用文件变量CAT访问,如:$input = ;下面的例子使用命令w的输出来列出当前登录的所有用户名。 1 : #!/usr/local/bin/perl 2 : 3 : open (WOUT, “w|“); 4 : $time = ; 5 : $time = s/ */; 6 : $time = s/ .*/; 7 : ; # skip headings line 8 : users = ; 9 : close (WOUT); 10: foreach $user (us

6、ers) 11: $user = s/ .*/; 12: 13: print (“Current time: $time“); 14: print (“Users logged on:n“); 15: $prevuser = “; 16: foreach $user (sort users) 17: if ($user ne $prevuser) 18: print (“t$user“); 19: $prevuser = $user; 20: 21: 结果输出如下: Current time: 4:25pm Users logged on:davekilroyrootzarquon w命令列出

7、当前时间、系统负载和登录的 用户,以及每个用户的作业时间和当前运行的命 令,如: 4:25pm up 1 day, 6:37, 6 users, load average: 0.79, 0.36, 0.28User tty login idle JCPU PCPU whatdave ttyp0 2:26pm 27 3 w kilroy ttyp1 9:01am 2:27 1:04 11 -csh kilroy ttyp2 9:02am 43 1:46 27 rn root ttyp3 4:22pm 2 -csh zarquon ttyp4 1:26pm 4 43 16 cc myprog.c

8、kilroy ttyp5 9:03am 2:14 48 /usr/games/hack 上例中从w命令的输出中取出所需的信息 :当前时间和登录的用户名。第3行运行w命令 ,此处对open的调用指定w的输出用作程序的 输入,用文件变量WOUT来访问该输入。第4行 读取第一行信息,即:4:25pm up 1 day, 6:37, 6 users, load average: 0.79, 0.36, 0.28接下来的两行从这行中抽取出时间。首先,第 5行删除起始的空格,然后第6行删除时间和结尾 换行符之间的所有字符,存入变量$time。第7行从WOUT读取第二行,这行中无有用信息,故不 作处理。第8

9、行把剩下的行赋给数组users,然后第9行关 闭WOUT,终止运行w命令的进程。users中的每个元素都是一行用户信息,因为本程序只 需要每行的第一个单词,即用户名,故1012行去掉除换行 符外的其它字符,这一循环结束后,users中只剩下用户 名的列表。第13行输出存贮在$time中的时间,注意这时print不需要 加上换行符,因为$time中有。1621行对users中的用户 名排序并输出。因为同一个用户可以多次登录,所以用 $preuser存贮输出的最后一个用户名,下次输出数组元素 $user时,如果其与$preser相等,则不输出。3)文件重定向许多UNIX shell可以把标准输出文

10、件(STDOUT)和标准错误文件 (STDERR)都重定向到同一个文件,例如在Bourne Shell(sh)中,命 令$ foo file1 2 4: open (STDERR, “ 5: print STDOUT (“line 1n“); 6: print STDERR (“line 2n“); 7: close (STDOUT); 8: close (STDERR); 运行后,文件file1中的内容为:line 2line 1可以看到,这两行并未按想象的顺序存贮,为什 么呢?来分析一下这段程序。第3行重定向标准输出文件,方法是打开文件file1 将它与文件变量STDOUT关联,这也关闭了

11、标准输出文 件。第4行重定向标准错误文件,参数 4 : open (STDERR, “ 5 : $| = 1; 6 : select (STDERR); 7 : $| = 1; 8 : print STDOUT (“line 1n“); 9 : print STDERR (“line 2n“); 10: close (STDOUT); 11: close (STDERR); 程序运行后,文件file1中 内容为:line 1line 2第5行将$|赋成1,告诉Perl解释器当前缺 省文件不进行缓冲,因为未调用select,当前的 缺省文件为重定向到文件file1的STDOUT。第6行将当前缺省

12、文件设为STDERR,第7行又设置$|为1,关掉了重定向到file1 的标准错误文件的缓冲。由于STDOUT和 STDERR的缓冲均被关掉,向其的输出立刻被写 到文件中,因此line 1出现在第一行。4) 指定读写权限打开一个既可读又可写的文件方法是在文件 名前加上“+”,如下:open (READWRITE, “+file1“);此语句打开既可读又可写的文件file1,即可 以重写其中的内容。文件读写操作最好与库函数 seek和tell一起使用,这样可以跳到文件任何一 点。注:也可用前缀“+操作符一起使用时,eof 和eof()就不同了。现在我们来创建两个文件,分别 叫做file1和file

13、2。file1的内容为:This is a line from the first file.Here is the last line of the first file.file2的内容为:This is a line from the second and last file.Here is the last line of the last file.下面就来看一下eof和eof()的区别,第一个程序为: 1: #!/usr/local/bin/perl 2: 3: while ($line = ) 4: print ($line); 5: if (eof() 6: print (“-

14、 end of output -n“); 7: 8: 运行结果如下: $ program file1 file2 This is a line from the first file. Here is the last line of the first file. This is a line from the second and last file. Here is the last line of the last file. - end of output $ 这时,只有所有文件都读过了,eof()才 返回真,如果只是多个文件中前几个的末尾,返 回值为假,因为还有要读取的输入。9)

15、间接文件变量对于上述各函数open, close, print, printf, write, select和eof,都可以用简单变量来代替 文件变量,这时,简单变量中所存贮的字符串就 被看作文件变量名,下面就是这样一个例子,此 例很简单,就不解释了。需要指出的是,函数 open, close, write, select和eof还允许用表达 式来替代文件变量,表达式的值必须是字符串, 被用作文件变量名。1: #!/usr/local/bin/perl 2: 3: 4: 5: while ($line = 7: 8: 9: sub open_file 10: local ($filevar,

16、$filemode, $filename) = _; 11: 12: open ($filevar, $filemode . $filename) | 13: die (“Cant open $filename“); 14: 15: sub read_from_file 16: local ($filevar) = _; 17: 18: ; 19: 20: sub print_to_file 21: local ($filevar, $line) = _; 22: 23: print $filevar ($line); 24: 2、跳过和重读数据函数 名seek调调用 语语 法seek (filevar, distance

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号