强制终端输出缓冲区刷新

Force the terminal output buffer to flush

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

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

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

'clearing the buffer' 你可能是指冲洗。 stdout.flush; 应该可以解决问题。

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

除了 weltensturm's 定期接听电话 stdout.flush 之外,您还可以尝试使用

手动设置缓冲
  stdout.setvbuf(0, _IOLBF);

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