#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<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>