论坛登陆 用户: 密码:
联系我们
设为首页
加入收藏
业界新闻 网络编程 程序开发 网页图象 聊天通讯 软件应用 网络安全 硬件学堂 教育频道 站长club
  ·推荐新闻
 
·美前任官员认为amd告倒英特
·搜索引擎关键字排行简介
·网站优化教程(一)
·msn近期遭受木马病毒骚扰 用
·用qq管理你的系统^_^ 
·测评中心金山毒霸联合发布7
·qq群聊实名 普通用户不受影
·雅虎思科联手推数字邮件签名
·这18条背下来没人敢和你忽悠
·自己动手,拯救丢失的硬盘数
  ·资料搜索
 
  ·相关文章
·perl实例分析教程之十五
·perl实例分析教程之十六
·perl程序设计中常用的函数之一
·perl程序设计中常用的函数之二
·perl程序设计中常用的函数之三
·perl程序设计中常用的函数之四
·perl教学 第一篇 概述
·perl教学 第二篇 简单变量
·perl教学 第三篇 操作符之一
·perl教学 第三篇 操作符之二
  ·热门新闻
首页>>网络编程>>cgi专区>>文章正文

perl教学 第十一篇 文件系统之一


 日期:2005-7-18 8:46:07     来源:易特网络技术   编辑:黑鹰  点击:
    本章所讲的函数多数使用了unix操作系统的特性,在非unix系统中,一些函数可能没有定义或有不同的工作方式,使用时请查看perl联机文档。
一、文件输入/输出函数
本节讲述从文件中读取信息和向文件写入信息的内置库函数。
1、基本i/o函数
一些i/o函数在前面的章节中已有讲述,如

·open:允许程序访问文件
·close:终止文件访问
·print:文件写入字符串
·write:向文件写入格式化信息
·printf:格式化字符串并输出到文件
这里简单回顾一下,再讲一些前面未提到的函数。
1)open函数
open函数将文件变量与某文件联系起来,提供访问文件的接口,例如:open(myvar, "/u/file"); 如果文件打开成功,则返回非零值,否则返回零。缺省地,open打开文件用以读取其内容,若想打开文件以写入内容,则在文件名前加个大于号:open(myvar, ">/u/file"); 向已有的文件末尾添加内容用两个大于号:open(myvar, ">>/u/file"); 若想打开文件作为数据导向的命令,则在命令前加上管道符(|):open(mail, "|mail dave");
2)用open重定向输入
可以把打开的文件句柄用作向程序输入数据的命令,方法是在命令后加管道符(|),如:
open(cat, "cat file*|");
对open的调用运行命令cat 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 (@users) {
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:
dave
kilroy
root
zarquon
w命令列出当前时间、系统负载和登录的用户,以及每个用户的作业时间和当前运行的命令,如:

4:25pm up 1 day, 6:37, 6 users, load average: 0.79, 0.36, 0.28
user tty login@ idle jcpu pcpu what
dave 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
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行把剩下的行赋给数组@users,然后第9行关闭wout,终止运行w命令的进程。
@users中的每个元素都是一行用户信息,因为本程序只需要每行的第一个单词,即用户名,故10~12行去掉除换行符外的其它字符,这一循环结束后,@users中只剩下用户名的列表。
第13行输出存贮在$time中的时间,注意这时print不需要加上换行符,因为$time中有。16~21行对@users中的用户名排序并输出。因为同一个用户可以多次登录,所以用$preuser存贮输出的最后一个用户名,下次输出数组元素$user时,如果其与$preser相等,则不输出。
3)文件重定向
许多unix shell可以把标准输出文件(stdout)和标准错误文件(stderr)都重定向到同一个文件,例如在bourne shell(sh)中,命令
$ foo > file1 2>&1
运行命令foo并把输出到标准输出文件和标准错误文件的内容存贮到文件file1中。下面是用perl实现这一功能的例子:

1: #!/usr/local/bin/perl
2:
3: open (stdout, ">file1") || die ("open stdout failed");
4: open (stderr, ">&stdout") || die ("open stderr failed");
5: print stdout ("line 1\n");
6: print stderr ("line 2\n");
7: close (stdout);
8: close (stderr);
运行后,文件file1中的内容为:
line 2
line 1

上一篇:perl教学 第十一篇 文件系统之二
下一篇:perl教学 第十篇 格式化输出之四
[发送给好友] [打印本页] [关闭窗口] [返回顶部转载请注明来源:http://www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 黑鹰 投稿作者: 易特网络
信息来源: 易特网络技术 录入时间: 2005-7-18 8:46:07
浏览次数: 投稿信箱: shtghy@163.com
设置首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights ©2004-2005 iyit.net all rights reserved. 网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息