前段时间写一个程序时遇到了打开一个大于4G的文件的问题,我开始是用标准C函数fopen来打开,在Windows下跑没有问题,但是移植到Linux下时,却出现打开文件错误,测试发现打开小文件没有问题,这可能跟系统的处理有关,仔细一想,Linux下不可能不支持大文件啊,应该有别的接口,所以上网查了一下,好不容易查到一个英文网页讲这个东西,叫LFS(Large file support),Linux的标准底层C库(Glibc2.2.3以上)实现了对大文件的支持,并且专为定义了一套API,具体在Linux下打开大文件的方法有以下三种:
1。编译时使用“gcc -D_FILE_OFFSET_BITS=64”选项,这样所有的文件操作都会使 用64位来处理(也即大文件处理)
2。define _LARGEFILE_SOURCE 和 _LARGEFILE64_SOURCE,这样可以直接使用LFS的 接口,如open64.
3。使用Linux系统函数open, 并且在打开文件的参数中加入O_LARGEFILE,即
open("fileName", O_RDONLY | O_LARGEFILE)
我用的是第三种,没有问题。
1。编译时使用“gcc -D_FILE_OFFSET_BITS=64”选项,这样所有的文件操作都会使 用64位来处理(也即大文件处理)
2。define _LARGEFILE_SOURCE 和 _LARGEFILE64_SOURCE,这样可以直接使用LFS的 接口,如open64.
3。使用Linux系统函数open, 并且在打开文件的参数中加入O_LARGEFILE,即
open("fileName", O_RDONLY | O_LARGEFILE)
我用的是第三种,没有问题。