stdout重定向

时间:2011-10-15 20:48:01

标签: c redirect stream stdout

如果我制作dupstdout(以便稍后使用)并将freopenstdout发送到该文件,然后{{ 1}},文件不会立即更新数据。它仅在我执行printf("data")后才会更新。

fflush(stdout)是否有一些额外的副作用?

有更优雅的方法吗?

2 个答案:

答案 0 :(得分:2)

这是缓冲I / O中的正常行为。冲洗没什么奇怪的。

但是,在这种情况下你不应该搞乱stdout。使用fopen打开您的文件,您将获得FILE指针。在fprintf等函数中使用此指针直接在其中打印,如果需要立即结果,请将其刷新。完成后,别忘了用fclose关闭文件。

答案 1 :(得分:1)

您可以使用对C89 setvbuf()的单次调用,以避免使用fflush()混乱您的代码。或者可能是包装器setlinebuf()

但是以上所有内容都只是刷新缓冲区。您可能需要使用fsync()