【问题标题】:Force the terminal output buffer to flush强制终端输出缓冲区刷新
【发布时间】:2015-06-10 07:29:04
【问题描述】:

在 D 中编写一个 CLI 工具,我有一个进度计数器,它是一个循环,并打印下一个以 \r 开头的数字。

这是一个显示问题的最小示例

import std.stdio;
import core.thread;

void main(string[] args) {
    for (int i = 0; i < 10000; i++) {
        write("\r", i);
        Thread.sleep(msecs(1));
    }
}

我注意到,至少 mac 终端会缓冲输出,一旦打印了换行符或打印了一定数量的字符,输出就会被刷新。

对我来说,这意味着计数器滞后且偶尔上升。

我的问题是, 如何在不打印换行符的情况下强制刷新输出缓冲区?

【问题讨论】:

  • 更具体:您使用什么语言编写程序?你能给我们看一些示例代码吗?

标签: macos terminal d


【解决方案1】:

“清除缓冲区”可能是指刷新。 stdout.flush; 应该可以解决问题。

清除通常是指从控制台中删除所有输出以获得干净的窗口。

【讨论】:

    【解决方案2】:

    除了weltensturm's定期回复stdout.flush外,您可以尝试手动设置缓冲

      stdout.setvbuf(0, _IOLBF);
    

    请参阅IEEE Std 1003.1, 2013 - setvbuf(或您当地的联机帮助页)了解概览。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2016-06-25
      • 2022-10-02
      • 1970-01-01
      • 2018-10-25
      • 2018-04-17
      相关资源
      最近更新 更多