这里说的大文件指大小超过4G的文件。
在32位环境下,linux默认打开、读、写超过4G的文件会返回错误。定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。
注意它必须定义在所有头文件之前。
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
或者在编译时添加如下参数:
-D_FILE_OFFSET_BITS=64-D_LARGEFILE_SOURCE
或者使用函数fopen64,但是该函数我的测试机上没有找到相关的说明,所以在我这里不可用。
_FILE_OFFSET_BITS的定义简单来说就是在32位机器上,使用64位的变量空间,长度增加了一倍。新的int就相当于原来的long int,这样就可以控制大于4G的文件了。
在大文件打开后,即可使用文件操作函数为所欲为了。
比较高级的用法:
Mmap方式,即内存映射的方法,简单说就是将文件分成片段,然后逐片的读到内存中并操作。
优点是性能很好,处理大文件的速度很快。
缺点是需要进程锁来锁住进程,并且需要保留每次操作的位置,用来下一次的操作。实现起来比较复杂,感兴趣的同学可以参考:
http://www.libing.net.cn/read.php/1252.htm
http://hi.baidu.com/vcprogrammer/blog/item/da863f4ff5533137aec3abec.html