Estou tentando executar o seguinte código:
#include <sys/time.h>
#include <stdio.h>
int main()
{
unsigned int ms, oldms = 0,dif;
struct timeval tv;
while(1)
{
gettimeofday(&tv, NULL);
ms=tv.tv_sec;
//printf("%d\n",ms-oldms );
dif=ms-oldms;
if(dif>3)
{
printf("3 seconds up");
oldms=ms;
}
}
}
Estou esperando que ele imprima "3 segundos acima" a cada 3 segundos, mas não exibe essa mensagem. Tentei depurar usando gdb, mas nada parece errado e ainda não há saída. Ao tentar depurar, adicionei uma instrução printf e magicamente a saída pode ser vista.
Se eu executar o programa após remover o // printf ("% d \ n", ms-oldms); declaração, não há saída novamente. Não tenho certeza do que está acontecendo e se é dependente de alguma coisa.
$ gcc --version gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
O buffer de saída é o motivo.
stdout
é buffer de linha por padrão quando conectado a um dispositivo terminal. Você pode limpar isso usando fflush(stdout);
ou usando \n
in printf()
ie printf("3 seconds up\n");
. ou desativando-o comsetbuf(stdout, 0);
I / O é lento em geral. Portanto, as implementações usam um buffer de tamanho fixo e printf quando fica cheio. Na prática, fazer chamadas com fflush(stdout);
muita frequência pode afetar o desempenho.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras