强制终端输出缓冲区刷新

时间:2015-06-10 07:29:05

标签: macos terminal d

在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终端缓冲输出,打印换行后刷新,或者打印了一定数量的字符。

对我来说,这意味着反作用迟滞并偶尔会上升。

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

2 个答案:

答案 0 :(得分:1)

通过'清除缓冲区',你可能意味着冲洗。 stdout.flush;应该做到这一点。

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

答案 1 :(得分:0)

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

  stdout.setvbuf(0, _IOLBF);

请参阅IEEE Std 1003.1, 2013 - setvbuf(或您当地的联机帮助页)以获取概述。