[C con Clase] duda con printf y sockets

Programante programante en gmail.com
Lun Jun 1 23:07:51 CEST 2009


> No es un problema de la función 'printf()', sino de 'stdout'. La
> salida estándar almacena completamente los datos a enviar. Cuando el
> almacenamiento (o "búfer") se llena al máximo, entonces
> automáticamente es enviado como un bloque. La otra forma de enviar la
> información es invocando 'fflush()', que ciertamente otras funciones
> realizan esta tarea automáticamente, como es cerrar un fichero o canal
> de salida.
>
> Sugiero invocar 'fflush()' para el canal de 'stdout' si quieres
> mantener cierta sincronización.
>
> También podrías cambiar el almacenamiento de 'stdout' a través de la
> función 'setvbuf()'. Por ejemplo,
>
> int main()
> {
>   setvbuf( stdout, 0, 0, _IONBF );
>   ...
> }
>
> De esta manera, indicamos que 'stdout' no será almacenado. Esto
> implica que cualquier dato enviado a la salida estándar será
> inmediatamente enviado. Eso sí, no te puedo garantizar si esto
> funcionará para 'stdout', al tratarse de un "fichero" especial.
>
>
> Espero que esto te ayude.
>
> Steven

O sencillamente cambiando los  printf("f1");     printf("f2");    
printf("f3");  por printf("f1\n");     printf("f2\n");    
printf("f3\n");  ya que si la salida es a una consola, por defecto lo
imprime al final de cada línea (y los mensajes son más legibles).
También podrías en su lugar usar la salida de errores: fprintf(stderr,
"f1");     fprintf(stderr, "f2");     fprintf(stderr, "f3");  stderr por
defecto no está bufereado.






Más información sobre la lista de distribución Cconclase