解决方法:
fprintf/vfprintf之后,加语句fflush(fp)。
不用加setbuf语句,加了可能会有问题。
参考:
fprintf后,消息没有被写到文件的解决方法_Self-Discipline的博客-CSDN博客_fprintf无法写入文件fprintf 未将消息内容写到文件的解决方法_白灬华的博客-CSDN博客_fprintf无法写入文件
fflush fsync哪个耗时长 fwrite - CSDN
printf立即刷新
在C语言中,printf
函数默认情况下并不立即刷新输出缓冲区。要立即刷新输出缓冲区,可以使用fflush
函数。fflush
函数用于清空指定输出流或文件流的内部缓冲区,确保所有的数据都被写入到目标设备中。
对于标准输出流stdout
,可以使用fflush(stdout)
来立即刷新缓冲区。下面是一个示例:
#include <stdio.h>
int main() {
printf("Hello, World!");
fflush(stdout); // 立即刷新标准输出缓冲区
return 0;
}
请注意,fflush
函数通常用于文件流或需要立即输出的场合。在大多数情况下,不需要显式地调用fflush
,因为C标准库在程序退出时会自动刷新所有的输出流。然而,如果需要确保在关键时刻输出被立即刷新,那么使用fflush
是一个好的选择。
另外,值得注意的是,在某些特殊情况下,例如在嵌入式系统或操作系统内核中,可能没有实现标准C库或缓冲机制,这时可能需要使用其他方法来确保输出被立即写入。