[C con Clase] duda con printf y sockets

Steven Davidson srd4121 en njit.edu
Lun Jun 1 09:29:47 CEST 2009


Hola Matías,

Matias V. wrote:
> Hola
> 

[CORTE]

> La ventana donde ejecute el programa servidor pasa a quedar asi:
> 
> $ ./servidor
> f1f2f3f4f5f6server: got connection from 190.190.9.104
> f7 $
> 
> 
> Es decir aparece todo el texto.
> 
> Lo que necesitaria conocer es alguna explicación tecnica de porque el
> texto de los printf no va apareciciendo a medida que se ejecuta el
> programa.
> 

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





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