Comportamento não explicado do loop C- while

criança

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

PP

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 \nin 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.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados