linux大文件

1. 如何查看linux系统的位数(32/64):

    * 直接看看有没有/lib64目目录的方法:

           64位的系统会有/lib64/lib两个目录,32位只有/lib一个

    * getconf LONG_BIT

          32位的系统中int类型和long类型一般都是4字节,64位的系统中int类型还是4字节的,但是long已变成了8字节

    * uname -a

          如果是64位,会有x86_64的字样

    * 用编程的方法,sizeof( long size_t )就是系统的位数

          这个与编译器版本有关,有时会不相符。不建议使用。所以在编程中,用可以指定int的长度int32_tint64_tuint32_tuint64_t等可以避免位数问题和增强可读性

2. linuxC语言操作大文件(4G以上)

一般情况下,64位操作系统可以操作任何大文件(2^64)

以下讨论的是32位机器的情况。

首先32位机器用fopen/fclose打开大文件没有问题,顺序读写操作while(!feof(fp)){ fread / fgets / fscanf }while(1){ fwrite / fputs / fprintf} 也没有问题。

由于32位机器下long32位,故

fseek (FILE *stream, long offset, int whence)

long ftell(FILE *stream) 不能访问4G以上文件

此时要用 fseeko (FILE *stream, off_t offset, int whence)

off_t ftello(FILE *stream);代替

类型off_t 的定义在 <sys/types.h>里面:

# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
off_t
32位机器中是32bit64位机器中是64bit。那么,在32位机器中,在include之前加入宏定义#define _FILE_OFFSET_BITS 64,或者编译是加入-D_FILE_OFFSET_BITS 64告诉系统在文件内部使用64位的偏移地址,使off_t变成__off64_t类型。

这样,只要你用64bit的类型(off_tlong(64位机器),和long long(32位机器) int64_t/uint64_t)声明offset作为fseeko的参数输入,就可以操作4G以上的文件了。

许多人还提到在宏定义中多写上一些:

#define _FILE_OFFSET_BITS 64

#define _LARGEFILE_SOURCE

#define _LARGEFILE64_SOURCE

但另外两个的具体功能我现在尚未搞得很清楚,等以后了解完全再补上。

*   使用LINUX自己的库函数进行文件操作(*nix I/O操作),加入O_LARGEFILE选项:

#define __USE_LARGEFILE64

#include <fcnl.h>

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

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值