免费注册 查看新帖 |

Chinaunix

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

perl如何读文件的,不是问的code,而是处理过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-09-29 13:40 |只看该作者 |倒序浏览
请教一下, perl 是如何读取文件的。注意不是code 怎么写,而是处理过程。
我测试了一下,一个文件26万行,在刚进入文件句柄迭代之后,把文件删除。结果是所有的文件内容都读取到了。

之前认为的是,文件句柄会一部分一部分读入到内存,然后做迭代操作。(或许数据量不够大?)

所以想问下各位大神,Perl在操作文件句柄时,是怎样的过程。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
2 [报告]
发表于 2017-09-29 14:59 |只看该作者
用while<>的话,是部分读取的。占用内存小。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2017-09-30 12:13 |只看该作者
文件是文件系统在维护,大多数 OS 用的文件系统都是内核级的,这就意味着所有的文件操作一定会走系统调用,只要走系统调用,你就可以用 strace(一个工具软件) 来追踪程序的运行细节。

不管是你用来读文件的 perl 命令,还是用来删除文件的 rm 命令,你都可以用 strace 来跟踪它们到底是如何工作的,
strace 会告诉你详细的细节。

以上是【渔】的部分。建议你认真阅读 APUE,这样你才能够读懂 strace 的输出。

【鱼】的部分就简单了:你删除文件的时候,实际上文件并没有真正删除,只要有打开的文件句柄尚未关闭,仍然是可以继续读到文件内容的,这是王八的屁股,规定。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
4 [报告]
发表于 2017-10-02 12:28 |只看该作者
动态语言在底层做了很多为改善效率的优化,如果想了解底层的运作,还是看源码吧。

或者是研究更底层的 Golang , 看看读取文件的过程。

其实这些知识没什么用,正在读取的文件删除,本身是意外事件。想编写更快的代码,还是用 Golang 等静态语言

论坛徽章:
0
5 [报告]
发表于 2017-10-05 11:04 |只看该作者
在Linux上,如果在文件句柄打开的情况下把文件删除的话,只要该句柄依然有效则文件的inode会依然存在,直至句柄结束文件的内容才真正被删除。即这种情况下文件系统里看不到这个文件,而从该句柄依然可以作读取操作。利用这个trick可以实现所谓anonymous temporary file,虽然一般情况下不需要这么做。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP