Como usar o comando pv para o arquivo executável?

-1

Eu sei que posso usar o comando pv para mostrar o progresso do comando. por exemplo:

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

Mas quando eu tenho um arquivo main.c que tem o seguinte código:

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

e quando executo este arquivo, tenho um arquivo executável a.out. Então, agora eu quero usar o comando pv para mostrar o progresso do comando ./a.out. Existe alguma maneira de fazer isso?

    
por agangwal 13.07.2017 / 08:24

1 resposta

1

Como mencionei no meu comentário, a questão central é que o a.out grava em um arquivo, não em stdin stream, o que significa que pv não pode receber dados. Quando o seu programa envia dados para stdin stream, então funciona:

$ ./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;
}

A propósito, você não precisa usar fprintf() para gravar em stdout , um simples printf("%d\n",i); pode ser suficiente

    
por Sergiy Kolodyazhnyy 13.07.2017 / 08:50