AIX环境下,C语言读写大于2G文件的问题

ayao2006 2011-12-20 03:52:05
我在程序头定义了
#define _FILE_OFFSET_BITS 64
#define _LARGEFILE_SOURCE

然后在编译的时候加上了 -D_FILE_OFFSET_BITS=64
编译语句是:

/usr/vac/bin/cc -D_FILE_OFFSET_BITS=64 -I /oracle/app/oracle/product/10.1.2/rdbms/public -I /oracle/app/oracle/product/10.1.2/precomp/public -o test -L /oracle/app/oracle/product/10.1.2/lib32 -lclntsh -lC_r test.C

这样为什么在写文件,当数据超过2147483647后就报写文件错误了?请高人指点
...全文
516 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Squall1009 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

看了国内的AIX贴,总的来说真的水平太低了.
[/Quote]
大哥,排除ulimit的限制的话,9#的说法是正确的说法,也是标准的做法。
kasaikin 2012-06-22
  • 打赏
  • 举报
回复
看了国内的AIX贴,总的来说真的水平太低了.
kasaikin 2012-06-22
  • 打赏
  • 举报
回复
哈,我来解决.
你用AIX4.3-AIX5L的话,
不用定义
----------#define _FILE_OFFSET_BITS 64
----------#define _LARGEFILE_SOURCE
直接用fopen64
你用AIX6.1-AIX7.1的话,
cc -q64
就可以了.
blackboy002 2012-02-24
  • 打赏
  • 举报
回复
编译的时候加上-q 64试试
mymtom 2012-02-04
  • 打赏
  • 举报
回复
楼主用的环境变量OBJECT_MODE是32吧,或者没有设置。

需要xlc需要加参数
xlc -D_LARGE_FILES -qlonglong

这个可以用下面的命令看到
getconf XBS5_ILP32_OFFBIG_CFLAGS
沭水河畔 2011-12-21
  • 打赏
  • 举报
回复
strace跟踪一下cp命令如何处理的,模仿之。
qq120848369 2011-12-21
  • 打赏
  • 举报
回复
程序已经define了,你加-D有什么用。。。又不是if宏。。。
ayao2006 2011-12-21
  • 打赏
  • 举报
回复
已经排除了操作系统限制的问题。
程序中所使用的函数就是 fopen() fput(),数据是从数据库中用游标取出的,数据没有结束,就是报写文件错误。
请高人指点
ayao2006 2011-12-21
  • 打赏
  • 举报
回复
那请问应该怎么写才能读写大于2G的文件
sangli00 2011-12-20
  • 打赏
  • 举报
回复
貌似是个很老的问题拉
shenghuiping2001 2011-12-20
  • 打赏
  • 举报
回复
修改一下:/etc/security/limits 改一下。
shenghuiping2001 2011-12-20
  • 打赏
  • 举报
回复
这个文件是ulimited 的设置造成的。
su - user_name

ulimited -a 就可以看到unlimited 的设置。

vi /etc/limits 就可以修改了。
把值设成-1
teleinfor 2011-12-20
  • 打赏
  • 举报
回复
关键是你操作文件的代码是什么?是不是出现越界或者溢出了?32位库函数问题?

1,196

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨IBM AIX平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • IBM AIX社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧