fread()在fwrite()之后得到0个字节

我为FILE*对象(大小为8 * 1024 )设置了一个很大的缓冲区,我正在写一个4字节的数据,然后读取了4,但读取失败。 如果我刷新FILE*读取成功。

 typedef struct _MyFile { /* file descriptor */ unsigned char fileBuf[8*1024]; FILE *file; } MyFile; int main() { MyFile myFile; int res; char bufWrite[4] = { 1, 2, 3, 4 }; char bufRead[4]; /* Open file for both reading and writing */ myFile.file = fopen("myfile.txt", "w"); /* Change the file internal buffer size */ setvbuf(myFile.file, myFile.fileBuf, _IOFBF, sizeof(myFile.fileBuf)); /* Write data to the file */ res = (int)fwrite(buf, 1, 4, myFile.file); printf("write: res = %d\n", res); /* Seek to the beginning of the file */ fseek(fp, SEEK_SET, 0); /* Read and display data */ res = (int)fread(buf, 1, 4, myFile.file); printf("read: res = %d\n", res); fclose(myFile.file); return 0; } 

输出是:

 write: res = 4 read: res = 0 

如果我写超过8K或使用write()而不是fwrite()fread()可以正常工作。

事情是我不能使用fflush()

有什么办法可以解决吗?

您已经以只写模式打开了您的文件。 句柄不知道你想阅读它。

只需以读写模式打开文件即可:

 myFile.file = fopen("myfile.txt" , "w+"); 

我已经测试了它,并成功读回了读缓冲区中的数据。

只写模式:

 write : res = 4 read: res = 0 bufRead: -83 20 82 117 

读/写模式:

 write : res = 4 read: res = 4 bufRead: 1 2 3 4 

编辑:我第一次尝试使用"rw"模式工作,但给了奇怪的写返回值结果:

 write : res = 0 read: res = 4 bufRead: 1 2 3 4