免费注册 查看新帖 |

Chinaunix

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

要处理的文件太大怎么办(在线等) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-20 08:44 |只看该作者 |倒序浏览
我编了一个C程序(在solaris8上)处理log记录,测试程序没有问题。但实际使用时却发现,该C程序报错,说找不到日志文件,其实日志文件就在那里!是不是我的log文件太大,它有5G左右,导致C程序无法处理?
如果是的话,请高手指教,怎么能够解决这个问题呢?

论坛徽章:
0
2 [报告]
发表于 2003-05-20 09:42 |只看该作者

要处理的文件太大怎么办(在线等)

在线等,请高手回答。

论坛徽章:
0
3 [报告]
发表于 2003-05-20 10:58 |只看该作者

要处理的文件太大怎么办(在线等)

该LOG文件是否允许用户修改?
用vi试一下就知道。

论坛徽章:
0
4 [报告]
发表于 2003-05-20 11:13 |只看该作者

要处理的文件太大怎么办(在线等)

楼上的同志有用过vi打开5G之大的文件吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-05-20 11:19 |只看该作者

要处理的文件太大怎么办(在线等)

它有5G左右,导致C程序无法处理

有些系统对于文件的大小有限制。对于一些编译工具如vi等操作改文件一般不会出错,除非系统缓存不足导致打开失败。对于一些命令例如tail head等,由于缓存有限,因此很少出现打开失败的情况。

如果通过应用程序来打开文件,打开失败的原因很多,例如权限、系统文件表项满、系统对进程打开文件的限制等。

请检查你open或者fopen调用失败返回出错信息和出错码。然后原因一目了然。

论坛徽章:
0
6 [报告]
发表于 2003-05-20 18:05 |只看该作者

要处理的文件太大怎么办(在线等)

5 G已超过文件操作函数的支持上限

文件操作函数只支持2G
因为他们使用long保存文件指针

在32位上就是最大2g

论坛徽章:
0
7 [报告]
发表于 2003-05-20 22:04 |只看该作者

要处理的文件太大怎么办(在线等)

编译成64位的是不是就可以了?

论坛徽章:
0
8 [报告]
发表于 2003-05-20 22:41 |只看该作者

要处理的文件太大怎么办(在线等)

我man来man去,终于找到了解决的办法。
问题是这样的,默认的程序只能打开2G以下的文件。能打开2G以上的文件的程序,被称为larger file aware 程序,例如head、tail和grep等等(可以使用"man largefile"来查看相关内容。
同样,一般的C程序也是不能打开,需要使用64位的命令才行。可以使用"man lp64"来查看32位命令和64位命令的对应表。如stdio.h中如下:
<stdio.h>;
     int fgetpos();                int fgetpos64();
     FILE *fopen();                FILE *fopen64();
     FILE *freopen();              FILE *freopen64();
     int fseeko(...,               int fseeko64(...,
       off_t, ...);                  off64_t, ...);
   int fsetpos(...,              int fsetpos64(...,
     const fpos_t *);              const fpos64_t *);
  off_t ftello();               off64_t ftello64();
  FILE *tmpfile();              FILE *tmpfile64();

我将c程序中的fopen修改成fopen64,重新编译了一下,运行起来果然没有问题(我要处理的文件可是有5G呀!)。

论坛徽章:
0
9 [报告]
发表于 2003-05-21 09:15 |只看该作者

要处理的文件太大怎么办(在线等)

lp64在 SOLARIS下有什么对应的命令吗

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2003-05-21 11:53 |只看该作者

要处理的文件太大怎么办(在线等)

fgetpos64(), fopen64(), freopen64(), fseeko64(), fsetpos64(),
      fstatvfsdev64(), ftello64(), ftw64(), nftw64(), statvfsdev64(),
      tmpfile64()

this  funtions non-POSIX standard API interfaces to support large
      files.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP