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