如果我制作dup
流stdout
(以便稍后使用)并将freopen
流stdout
发送到该文件,然后{{ 1}},文件不会立即更新数据。它仅在我执行printf("data")
后才会更新。
fflush(stdout)
是否有一些额外的副作用?
有更优雅的方法吗?
答案 0 :(得分:2)
这是缓冲I / O中的正常行为。冲洗没什么奇怪的。
但是,在这种情况下你不应该搞乱stdout。使用fopen
打开您的文件,您将获得FILE
指针。在fprintf
等函数中使用此指针直接在其中打印,如果需要立即结果,请将其刷新。完成后,别忘了用fclose
关闭文件。
答案 1 :(得分:1)
您可以使用对C89 setvbuf()
的单次调用,以避免使用fflush()
混乱您的代码。或者可能是包装器setlinebuf()
。
但是以上所有内容都只是刷新缓冲区。您可能需要使用fsync()
。