1、包含所有头文件以前,先定义这些宏:
第一种:
#ifndef __USE_FILE_OFFSET64
#define __USE_FILE_OFFSET64
#endif
#ifndef __USE_LARGEFILE64
#define __USE_LARGEFILE64
#endif
#ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE
#endif
第二种:
#ifndef _LARGEFILE_SOURCE
#define _LARGEFILE_SOURCE
#endif
#ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE
#endif
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
(第二种在linux下测试通过,第一种没有通过,不知道是否适用于Windows?有兴趣的朋友可以试试)
#包含头文件
#include
#include
#include
#include
#include
2、使用open打开文件的时候,加上O_LARGEFILE标志:
int fd = open("test.dat", O_RDWR|O_APPEND|O_CREAT|O_LARGEFILE,
0666);
read(), write()等与一般的用法一致,无变化。
3、注意lseek()函数,文件未超过2G的时候,一切工作良好;
文件超过2G后,调用返回-1,errno为EOVERFLOW (errno=75, msg=Value too large for
defined data type)
需要使用lseek64()代替lseek()。很奇怪,定义了宏以后,并未自动将lseek变成lseek64。(知道原因的朋友可以教教我)
4、注意stat()函数,传入的文件如果在2G内,工作良好;
传入的文件如果超过2G,返回-1, errno为EOVERFLOW (errno=75, msg=Value too large
for defined data type)
应该这样使用:struct stat64 st; stat64("file", &st);
5、为了保险,建议所有操作文件的函数都是用支持64位大文件的。否则当文件超过2G后,难免会出现什么未知的异常。