新问题,关于大数据读写的问题Solaris 2.8下

#include

 1<stdio.h>   
 2#include <memory.h>   
 3  
 4extern int errno;   
 5void main()   
 6{   
 7FILE *fp;   
 8unsigned int loop;   
 9int error;   
10char buffer[1024];   
11memset(buffer,'a',1024);   
12if((fp=fopen("test.dat","wb+"))==NULL)   
13{ printf("Create file failed!\n"); return ; }   
14setvbuf(fp,NULL,_IONBF,0);   
15for(loop=0;loop&lt;1024*1024*3;loop++)   
16{ if((error=fwrite(buffer,1024,1,fp))!=1)   
17{ error=errno;   
18printf("Write failed! errno code=%d\n",errno);   
19fclose(fp);   
20return;   
21}   
22}   
23fclose(fp);   
24return;   
25}   
26  
27以上这段程序在windows,unix下都能运行   
28但是在Solaris 2.8下不能完全执行   
29创建了一个2147483647大小的数据文件就退出了   
30请问在unix下fwrite不能写超过2GB的数据吗?   
31我用java写在同样的unix环境下可以创建3gb的数据呀   
32程序执行的结果为errno=27   
33不知道各位有没有什么解决办法   
34\---------------------------------------------------------------   
35  
36你需要用64位版的gcc,参数好象是-m64。   
37  
38如果你没有64位的gcc。在你程序的第一行前加上:   
39#define _FILE_OFFSET_BITS 64   
40这样off_t就是long long 类型了。   
41这样做可能会行,我不敢保证,因为我从没用过2G以上的大文件。</memory.h></stdio.h>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus