免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11560 | 回复: 17
打印 上一主题 下一主题

请教:子程序调用时如何传递文件句柄??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-23 18:09 |只看该作者 |倒序浏览

  1. sub process()
  2. {
  3.         print(<FILE>);
  4. }

  5. open(FILE, "/etc/passwd");
  6. &process();
  7. close(FILE);
复制代码

这个程序输出了/etc/passwd文件的内容,我有j几个问题:
  • open创建了一个全局变量,请问如何让open创建了一个局部变量?
  • 如何把文件句柄传递给子程序?
  • 在子程序中如何以参数的方式引用文件句柄?


希望能够实现如下功能:

  1. #include <stdio.h>

  2. void process(FILE * file)
  3. {
  4.     现在可以调用fread、fwrite函数对file操作
  5. }

  6. int main()
  7. {
  8.     FILE * file;

  9.     file = fopen("/etc/passwd", "r");
  10.     process(file);
  11.     fclose(file);
  12. }
复制代码

[ 本帖最后由 flw 于 2007-8-23 19:08 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-08-23 18:33 |只看该作者
  1. open my $fh, "</path/to/foo" or die;
  2. process( $fh );
  3. close( $fh );

  4. sub process {
  5.     my $fh = shift;
  6.     my $line = <$fh>;
  7.     print $line, "\n";
  8.     read $fh, my $buffer, 1024;
  9.     print $buffer, "\n";
  10. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-08-23 19:02 |只看该作者
懂了,应该使用$file的形式而不是光秃秃的FILE打开文件,这样就统一了,谢谢!

为什么书上都是使用open(FILE, "/etc/passwd")形式打开的?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2007-08-23 19:06 |只看该作者
原帖由 DennisRitchie 于 2007-8-23 19:02 发表

为什么书上都是使用open(FILE, "/etc/passwd")形式打开的?

那样也可以:
  1. open FH, "</path/to/foo" or die;
  2. process( *FH );
  3. close FH;

  4. sub process {
  5.     local *FH = shift;

  6.     my $line = <FH>;
  7.     print "$line\n";
  8. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2007-08-23 19:19 |只看该作者
很好,谢谢flw,这个论坛上好多人回答问题都是答飞所问。

哎,我发现好的perl教程真少,常见而又重要的问题都不提。另外,也不知道中国怎么有那么多的小网站的?每个网站都千篇一律的转载一些质量奇差的烂文章、烂教程。

flw有空你去写本关于perl的书吧,我支持你。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2007-08-23 19:28 |只看该作者
to 楼上的:
你太浮躁了。
我不信你仔仔细细看完小骆驼大骆驼还会问出这样的问题。

论坛徽章:
0
7 [报告]
发表于 2007-08-23 19:40 |只看该作者
原帖由 flw 于 2007-8-23 19:28 发表
to 楼上的:
你太浮躁了。
我不信你仔仔细细看完小骆驼大骆驼还会问出这样的问题。

什么是大小骆驼?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-08-23 19:43 |只看该作者
原帖由 DennisRitchie 于 2007-8-23 19:40 发表

什么是大小骆驼?

这个便是小骆驼。
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
大骆驼稍后再看吧。
先把这个看完。

论坛徽章:
0
9 [报告]
发表于 2007-08-23 19:52 |只看该作者
Perl语言入门 (Learning Perl)---小骆驼,因为书皮是个小骆驼
http://www.douban.com/subject/2030712/

Perl语言编程 (Programming Perl) -- 大骆驼,因为书皮是个骆驼:)
http://www.douban.com/subject/1231697/

论坛徽章:
0
10 [报告]
发表于 2007-08-23 20:02 |只看该作者
原帖由 flw 于 2007-8-23 19:43 发表

这个便是小骆驼。
http://bbs.chinaunix.net/viewthr ... p%3Bfilter%3Ddigest
大骆驼稍后再看吧。
先把这个看完。

粗粗浏览一下,看上去像本不错的好书,但没有面向对象的内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP