[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