Я знаю, что могу использовать команду 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);
, и когда я запускаю этот файл, у меня есть a.out запускаемый файл. Итак, теперь я хочу использовать команду pv для отображения прогресса команды ./a.out. Есть ли способ сделать это?
Как я уже упоминал в своем комментарии, основная проблема заключается в том, что ваш 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); может быть достаточным
Как я уже упоминал в своем комментарии, основная проблема заключается в том, что ваш 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); может быть достаточным
Как я уже упоминал в своем комментарии, основная проблема заключается в том, что ваш 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); может быть достаточным