最初发现程序老是coredump,gdb发现是 Program terminated with signal 25, File size limit exceeded.
用ulimit -f 发现没有设置文件大小限制。写了个小的测试程序,发现文件写到2.1G时,系统打印 File size limit exceeded 然后就退出
了。后来,同事提醒,明白了32位的操作系统,内存最大寻址也就2G。文件的offset偏移也有同样的问题。
但是用通过cat 追加文件,的确可以有2.1G以上大小的文件,所以一定有办法。
在网上找到两种解决方法:
1. 打开文件时指定 O_LARGEFILE 选项,只对open函数有效,对标准IO的fopen,没办法指定。
2. 编译时指定这些宏 -D_LARGEFILE_SOURCE -D_LARGEFILE_SOURCE64 -D_FILE_OFFSET_BITS=64。