如何将“\r”打印到文件

How to print "\r" to a file

我想在我的程序中显示一个进度条,所以我添加了这个

#include <stdio.h>
#include <unistd.h>

int main() {
    puts("begin");
    for (int i = 0; i < 100; i++) {
        printf("%d%% finished.\r", i);
        fflush(stdout);
        usleep(100000);
    }
    puts("end");
}

当它输出到 stdout 时,它会很好地显示一条指示当前进度的线。

但是,如果我将它的输出定向到一个文件,那么所有带有 printf("%d%% finished.\r", i); 的行都会丢失。

是否可以将所有行保存在一个文件中?

当输出被重定向到一个文件时,你不能真正使用这样的格式,因为到文件的输出只向前写入,它永远不会向后写入。

如果您使用的是 POSIX 系统(例如 Linux 或 macOS),那么您可以使用 isatty 来检测您是否写入了实际的终端,然后更改您的输出格式相应。

输出文件中的行不太可能丢失,但有可能将文件复制到终端的速度如此之快,以至于每一行都覆盖了前一行,而您没有机会看到它。与您的程序不同,cat 不会在行间暂停。只有最后一行在最后可见,如果它至少与前面的一样长。

使用od -x以十六进制转储文件以检查实际文件内容。