问题描述
我有这个测试程序:
#include "stdio.h"
int main()
{
FILE* read;
FILE* write;
write = fopen("file.txt","w");
fwrite("Hallo",1,6,write);
fflush(write);
read = fopen("file.txt","r");
//--------------------------------------
// setbuf(read,NULL); // read unbuffered
//--------------------------------------
char buf[6];
fread(buf,read);
printf("Should be -Hallo-: %s\n",buf);
fseek(write,SEEK_SET);
fwrite("Welt",4,write);
fflush(write);
fseek(read,SEEK_SET);
fread(buf,read);
printf("Should be -Welto-: %s\n",buf);
fclose(read);
fclose(write);
}
它将“Hallo”写入文件,然后读取“Hallo”。然后我们寻找开头并用“Welt”覆盖文件。这应该导致下一次阅读(也寻求开头)阅读“Welto”,“o”是“Hallo”的剩余部分。
此代码适用于 Linux 和 Windows,但不适用于 VxWorks(第二个 fread() 再次给出“Hallo”)。它适用于所有 3 个操作系统,当我
我阅读了有关 fseek() 的文档,我认为这不是错误,而是真正未定义的行为。没有定义操作系统是否必须重新读取文件或是否可以保留缓冲区。
我的母语不是英语(也许我误解了一些东西)所以我问你这是否属实。
另外,以上两个有没有其他解决方案?我想保持缓冲阅读,不想重新打开的开销。是否有重置缓冲区一次的功能?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)