#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp = fopen("b.txt","w");
if(fp == NULL)perror(""),exit(-1);
FILE* fp2 = fopen("b.txt","r");
char buf[6] = "hello";
fwrite(buf,strlen(buf),1,fp);
// fflush(fp); 如果将此行注释掉,下面则不会产生任何输出。你没有刷新缓冲区。
memset(buf,0,sizeof(buf));
int ret;
while((ret = getc(fp2)) != EOF)
{
ungetc(ret,fp2);
fread(buf,sizeof(buf)-1,1,fp2);
printf("%s\n",buf);//未输出任何东西。这是因为fwrite是带缓冲的写。
}
}
/*fflush()只能保证清空缓冲区到文件系统。fwrite() 写的可以用 fflush() 刷到内核态。。
fileno()得到fd, 然后 fsync(),sync(),fdatasync() 返回后才能保证写入到了底层储存媒体中。
For output streams, fflush() forces a write of all user-space buffered
data for the given output or update stream via the stream's underlying
write function. For input streams, fflush() discards any buffered data
that has been fetched from the underlying file, but has not been by the
application. The open status of the stream is unaffected.
If the stream argument is NULL, fflush() flushes all open output
streams.
Upon successful completion 0 is returned. Otherwise, EOF is returned
and errno is set to indicate the error.
*/