Linux C 下的大文件操作

本文介绍了在Linux环境下,如何处理大于4GB的大文件。通过定义预处理宏_FILE_OFFSET_BITS=64,可以在32位系统中进行大文件的读写操作。此外,提到了内存映射(Mmap)方法,虽然实现复杂,但能提供优秀的性能,适于高效处理大文件。对于Mmap的详细信息,可参考相关链接。
摘要由CSDN通过智能技术生成

这里说的大文件指大小超过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方式,即内存映射的方法,简单说就是将文件分成片段,然后逐片的读到内存中并操作。

优点是性能很好,处理大文件的速度很快。

缺点是需要进程锁来锁住进程,并且需要保留每次操作的位置,用来下一次的操作。实现起来比较复杂,感兴趣的同学可以参考:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值