Parece razonable, igual una prueba rapida me siguio andando mal. Lo voy
a ver con mas detalle y despues comento.

gracias por el hint. saludos

El mié, 22-10-2008 a las 13:10 -0300, juanii escribió:
> Si, creo que se lo que te esta pasando, y sigue siendo gracias al buen
> señor que invento los strings ASCIIZ :)
> Resulta que si mandas el \0 final vos estas mandando tres mensajes de
> (appx) 25 cada uno con su \0 al final.
> Si el escritor mando varios mensajes (mas de uno) antes que el lector
> los pudiera consumir, al primer read() va a traer en los 50 bytes el
> primer mensaje completo (incluyendo \0 final :) y parte del segundo
> mensaje. Cuando haces printf() del buffer se frena en el primer \0 y
> da la sensacion que el contenido del segundo "se perdio" aunque en
> verdad esta ahi en el buffer. Si imprimis el contenido byte por byte
> hasta llegar al valor de la var "leido" (y no con printf("%s")) vas a
> ver exactamente lo que esta pasando.
> 
> Saludos!
> 
> 2008/10/22 San Martín, Matías <[EMAIL PROTECTED]>:
> > Es cierto lo que vos decis, pero aun corrigiendo esos errores el
> > comportamiento extraño sigue pasando. Si al escritor le digo que mande
> > el \0 del final de las cadenas (en la linea: 'size_t count =
> > strlen(cadena);// + 1' descomento el + 1) me siguen llegando mal los
> > mensajes del otro lado.
> > Por ejemplo, si dejo todo como esta (con las correcciones indicadas
> > [1] ) y descomento el '// + 1' la salida que obtengo es:
> >
> > 7386: Mensaje numero 1 pid: 7387
> >
> > 7386: 7387
> >
> > Si dejo comentado anda todo ok.
> >
> > Lo extraño tambien es que si cambio el tamaño del buffer de lectura por
> > ejemplo poniendolo en 21, la salida que obtengo es
> >
> > 7467: Mensaje numero 1 pid
> > 7467: : 7472
> >
> > 7467: ro 2 pid: 7472
> >
> > 7467: aje numero 3 pid: 74
> > 7467: 72
> >
> >
> > alguna pista de que puede ser?
> >
> > saludos
> >
> >
> > [1] el bloque de codigo que cambio con las correcciones queda:
> >
> > const unsigned short count = 51; //tamaño del buffer de lectura
> > char buf[count];
> > memset(buf,0,count);
> >
> > while ((leido = read(fd, buf,count-1)) > 0)
> >
> > 

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a