我知道我可以使用 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);
就可以了