c – fseek现在支持大文件
发布时间:2020-12-16 07:26:11 所属栏目:百科 来源:网络整理
导读:现在看来fseek,至少在我的实现中,自然地支持大文件而没有fseek64,lseek或一些奇怪的编译器宏. 这是什么时候发生的? #include cstdio#include cstdlibvoid writeF(const char*fname,size_t nItems){ FILE *fp=NULL; if(NULL==(fp=fopen(fname,"w"))){ fprint
现在看来fseek,至少在我的实现中,自然地支持大文件而没有fseek64,lseek或一些奇怪的编译器宏.
这是什么时候发生的? #include <cstdio> #include <cstdlib> void writeF(const char*fname,size_t nItems){ FILE *fp=NULL; if(NULL==(fp=fopen(fname,"w"))){ fprintf(stderr,"t-> problems opening file:%sn",fname); exit(0); } for(size_t i=0;i<nItems;i++) fwrite(&i,sizeof(size_t),1,fp); fclose(fp); } void getIt(const char *fname,size_t offset,int whence,int nItems){ size_t ary[nItems]; FILE *fp = fopen(fname,"r"); fseek(fp,offset*sizeof(size_t),whence); fread(ary,nItems,fp); for(int i=0;i<nItems;i++) fprintf(stderr,"%lun",ary[i]); fclose(fp); } int main(){ const char * fname = "temp.bin"; writeF(fname,1000000000);//writefile getIt(fname,999999990,SEEK_SET,10);//get last 10 seek from start getIt(fname,-10,SEEK_END,10);//get last 10 seek from start return 0; } 上面的代码用二进制size_t格式的1-10 ^ 9条目写一个大文件. 解决方法
Linux x86-64几天来就有大文件支持(LFS);并且不需要任何特殊的宏来启用它 – 传统的fseek()和LFS fseek64()已经使用64位off_t.
Linux i386(32位)通常默认为32位off_t,否则会破坏大量应用程序 – 但您可以通过检查_FILE_OFFSET_BITS宏的值来测试环境中定义的内容. 有关Linux大文件支持的完整详细信息,请参阅http://www.suse.de/~aj/linux_lfs.html. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |