如何使用 pv 命令来执行文件?

如何使用 pv 命令来执行文件?

我知道我可以使用 pv 命令来显示命令的进度。例如:

for i in {1..200}; do sleep 0.1; echo "$i"; done | pv -ls 200 > output.txt

但是当我有一个文件 main.c 时,其中包含以下代码:

FILE * file;
file = fopen("output.txt", "a");
for(int i=0; i<200; i++){
    fprint(file, "%d\n", i+1);
}
fclose(file);

当我执行此文件时,我得到了一个.out 可执行文件。所以,现在我想使用 pv 命令来显示 ./a.out 命令的进度。有什么办法吗?

答案1

正如我在评论中提到的,核心问题是您a.out写入文件,而不是写入stdin流,这意味着pv无法接收任何数据。当您的程序将数据输出到stdin流时,它就可以工作:

$ ./a.out | pv -ls 200 > /dev/null                                 
 201  0:00:00 [2.09M/s] [========================>] 100%            

$ cat main.c
#include<stdio.h>

int main(){
    int i=0;
    for(i;i<=200;i++)
        fprintf(stdout,"%d\n",i);
    return 0;
}

顺便说一句,你不必使用fprintf()写入stdout,简单的printf("%d\n",i);就可以了

相关内容