急,一个关于open一个相当大的size的文件问题

来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:22:43
急,一个关于open一个相当大的size的文件问题
      首页 ->论坛首页 ->Perl[收藏此页到新浪ViVi]
阅读上一个主题 ::阅读下一个主题
作者留言
kx一扫光
侠客

注册时间: 2004-04-05
最后登录: 2005-08-08
帖子总数:16
精华帖子: 0
原创精华: 0
在线状态: ...离线...
发表于: 2005-07-25 12:33    发表主题: 急,一个关于open一个相当大的size的文件问题
为什么perl用open()不能打开一个3G多的文件,但是1.5G的文件却能打开?
而且我在系统里面用more是可以看的。
系统是SOLARIS 5.8 64BIT ,perl版本是5.6
是不是系统本身对打开文件的大小有限制?
如果有,请问是在那个地方?可以用命令看到么?我系统的ulimit -a结果如下:
core file size (blocks)     unlimited
data seg size (kbytes)      unlimited
file size (blocks)          unlimited
open files                  256
pipe size (512 bytes)       10
stack size (kbytes)         8192
cpu time (seconds)          unlimited
max user processes          29995
virtual memory (kbytes)     unlimited
哪位高人能帮忙,,十分感激!
返回页首

kx一扫光
侠客

注册时间: 2004-04-05
最后登录: 2005-08-08
帖子总数:16
精华帖子: 0
原创精华: 0
在线状态: ...离线...
发表于: 2005-07-25 13:21    发表主题:
那个高手出出主意啊!
返回页首

笨狗
精灵王


注册时间: 2004-06-16
最后登录: 2005-08-09
帖子总数:344
精华帖子: 0
原创精华: 0
BLOG主页:进入
在线状态: ...离线...
发表于: 2005-07-25 17:47    发表主题:
代码:
tie @lines, ‘Tie::File‘, $filename;
@lines的每一个index代表文件的一行
操作完了以后用
代码:
untie @lines;
_________________
点击进入→凌曦心情论坛

返回页首

rjhome
侠客

注册时间: 2002-11-11
最后登录: 2005-07-26
帖子总数:14
精华帖子: 0
原创精华: 0
在线状态: ...离线...
发表于: 2005-07-25 19:12    发表主题:
估计你是一次性读入,这样的话,可能内存或者缓存不够造成的。
返回页首

hh123456
侠客

注册时间: 2005-04-29
最后登录: 2005-08-05
帖子总数:43
精华帖子: 0
原创精华: 0
在线状态: ...离线...
发表于: 2005-07-27 09:34    发表主题:
en,没试过读这么大的文件,我觉得如果是一行一行处理,应该没问题。
while(<>) {...}
一次性读入肯定不好:
@lines =
返回页首

flw
版主 - 法师


注册时间: 2002-08-12
最后登录: 2005-08-09
帖子总数:5045
精华帖子:1
原创精华:2
BLOG主页:进入
在线状态: ...保密...
发表于: 2005-07-27 09:37    发表主题:
笨狗 写到:
笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<>) 然后重新命名要慢不止一个数量级。
_________________
Net::SMTP 的认证功能不好使,请用 Net:SMTP_auth
我非常同情你的遭遇。
可是,你的问题究竟是什么?
请尽量说清楚。
如果你不说清楚,
那么我所能做的,就只有同情了……
返回页首

flute
精灵王

注册时间: 2002-10-30
最后登录: 2005-08-09
帖子总数:337
精华帖子: 0
原创精华: 0
在线状态: ...离线...
发表于: 2005-07-27 12:30    发表主题:
我打开过6G的文件。
返回页首

Qiang
精灵

注册时间: 2003-12-17
最后登录: 2005-08-08
帖子总数:245
精华帖子: 0
原创精华: 0
来自: canada
在线状态: ...保密...
发表于: 2005-07-27 22:49    发表主题:
flw 写到:
笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<>) 然后重新命名要慢不止一个数量级。
Tie::File document said :
The file is not loaded into memory, so this will work even for gigantic files.
_________________
每一个 perl 程序里需要 -w 和 use strict.
#!/usr/bin/perl  -w
use strict;
http://wiki.perlchina.org Perl 文章翻译
http://perl.hcchien.org/TOC.html Perl 学习手札
返回页首

flw
版主 - 法师


注册时间: 2002-08-12
最后登录: 2005-08-09
帖子总数:5045
精华帖子:1
原创精华:2
BLOG主页:进入
在线状态: ...保密...
发表于: 2005-07-28 01:18    发表主题:
Qiang 写到:
Tie::File document said :
The file is not loaded into memory, so this will work even for gigantic files.
可是我处理一个 8M 的文件要好几分钟。
用 while(<>) 就快得多。几秒钟就完成了。
_________________
Net::SMTP 的认证功能不好使,请用 Net:SMTP_auth
我非常同情你的遭遇。
可是,你的问题究竟是什么?
请尽量说清楚。
如果你不说清楚,
那么我所能做的,就只有同情了……
返回页首

笨狗
精灵王


注册时间: 2004-06-16
最后登录: 2005-08-09
帖子总数:344
精华帖子: 0
原创精华: 0
BLOG主页:进入
在线状态: ...离线...
发表于: 2005-07-28 02:10    发表主题:
flw 写到:
笨狗,用 Tie::File 慢不慢?
我以前没用过,昨天看了你的回复就试着用了一下,慢死了,比 while(<>) 然后重新命名要慢不止一个数量级。
用while(<>)快是因为它使用内存没有限制,而tie默认只使用2MB的内存
也可以让tie使用尽量多的内存
引用:
The default memory limit is 2Mib. You can adjust the maximum read cache size by supplying the memory option. The argument is the desired cache size, in bytes.
代码:
# I have a lot of memory, so use a large cache to speed up access
tie @array, ‘Tie::File‘, $file, memory => 20_000_000;
_xyz