我正在修改一个大的C代码。出于测试目的,我不得不将stdout重定向到文件。为此目的,我使用此代码剪切:fp=freopen("OUT", "w" ,stdout)
现在所有printf调用都将写入fp。这是一个很大的代码,因此我不希望在每次退出之前搜索所有出口点并关闭文件。如果不关闭文件会发生什么?有没有办法在每次向文件写入内容时使其自动刷新?
答案 0 :(得分:4)
setvbuf
可能是要走的路:
setvbuf (fp, NULL, _IONBF, 0);
这将完全关闭缓冲。只是为不可避免的性能打击做好准备。
您还需要注意,这将仅在许多系统中的运行时库级别进行刷新,它不一定会导致刷新到存储介质,因为UNIX fsync(fileno(fp))
会尝试这样做。 / p>
所以,虽然你的程序崩溃会好起来,但如果整个操作系统陷入尖叫堆中,它将无济于事。但是,你可能比输掉一点输出更大的问题: - )
但是,除非你的程序 崩溃,否则你可能不应该担心它。 ISO C99部分地说,exit()
的一个行为,因此从main()
返回,是:
接下来,刷新所有带有未写入缓冲数据的开放流,关闭所有打开的流,...
因此,无论如何都会输出您的数据。
答案 1 :(得分:1)
是。将setvbuf
与_IONBF
:
setvbuf(stdout, 0, _IONBF, 0);