linux大文件问题

    32位LINUX系统对文件大小有个限制,最大只能达到2^31 - 1字节,也就是2G,即使文件系统支持更大的4000G的文件.具体为啥有这个限制我也说不清.只是在做一个数据库的TPC-H测试时发现的.上网找了几个资料,汇总一下大文件的解决之道.

    对于用C语言的API打开的文件,也就是用fopen(const char *filename, int mode)方式打开的文件,只需要在编译时加入一个参数,告诉系统在文件内部使用64位的偏移地址就行了:-D_USE_FILE_OFFSET_BITS=64,原有程序不需要做任何改动,保持程序的可移植性.

    另外,也可以使用LINUX自己的库函数进行文件操作:open(const char *filename, int flags, int mode)或者open(const char *filename, int flags)打开文件.只是其中的flags参数需要多加一个O_LARGEFILE.如下所示:

int fp = open("myfile", O_WRONLY | O_TRUNC | O_CREAT | O_LARGEFILE, 644);

    然而,对于O_LARGEFILE的引用却来的很不方便,在加入所有必需的头文件fcntl.h, sys/stat.h, sys/types.h等等后,还会被编译器提示O_LARGEFILE没有定义.这时,需要使用下面的方法使O_LARGEFILE变的有意义:

1  #define  __USE_LARGEFILE64
2  #include  < fcntl.h >
3  //  其它头文件,等等
4 
5  int  fp  =  open( " myfile " , O_TRUNC  |  O_CREAT  |  O_RDWR  |  O_LARGEFILE,  644 );
6 

 

转载于:https://www.cnblogs.com/huangpeng/archive/2009/03/12/1409752.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值