我为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