【问题标题】:stdout redirecting标准输出重定向
【发布时间】:2011-12-08 11:53:58
【问题描述】:

如果我创建stdout 流的dup(以便以后使用)并创建stdout 流的freopen 到文件然后printf("data"),文件不会立即更新与数据。只有在我执行fflush(stdout) 后才会更新。

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

有没有更优雅的方法来做到这一点?

【问题讨论】:

    标签: c redirect stream stdout


    【解决方案1】:

    这是缓冲 I/O 中的正常行为。冲洗不会发生任何奇怪的事情。

    但是,在这种情况下,您不应该弄乱标准输出。用fopen 打开你的文件,你会得到一个FILE 指针。在fprintf 等函数中使用此指针直接在其中打印,并在需要立即结果时刷新它。完成后不要忘记使用fclose 关闭文件。

    【讨论】:

    • 他可能没有调用 printf 的部分的源代码。
    【解决方案2】:

    您可以使用对 C89 setvbuf() 的一次调用来避免将您的代码与 fflush() 混淆。或者也许是包装器setlinebuf()

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

    【讨论】:

    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多