El mar, 23-12-2003 a las 10:47, Alberto escribi�:
[...]
> //cliente
> char str[256];
> scanf("%s", str);
> write (envio, &str, strlen(str));
[...]
> Pues bien, parece ser que si en cliente le introduces por ejemplo ls -l -a,
> el servidor lee de la pipe solamente ls !!!
>
> Osea que parece ser que dicho comando el scanf lo guarde en lugar de "ls -l
> -a\0", como "ls\0 -l\0 -a\0" !!!! o es el scanf que me extra�a much�simo por
> que no sabr�a por qu� hace eso, o es el write, que tampoco veo por que, o es
> la lectura de la pipe en el read.
>
> No me equivoco si afirmo que scanf guardar�a una frase como "El perro de san
> Roque\0" verdad?
Hola,
Haz man scanf y comprobar�s que detiene la lectura de la cadena
al encontrar el primer blanco. Si supieses que son exactamente tres
cadenas, podr�as hacer: scanf("%s %s %s",str1,str2,str3);
pero esto es bastante poco flexible. Usa gets() si quieres, esta funci�n
te permite leer toda la entrada salt�ndose los blancos, pero eso s�,
como te advierte la p�gina del man:
"Puesto que es imposible saber, sin conocer de antemano los datos,
cu�ntos caracteres va a leer gets(), y puesto que gets() continuar�
guardando caracteres una vez alcanzado el final del b�fer, su empleo es
extremadamente peligroso. Muchas veces ha sido utilizado para
comprometer la seguridad de un sistema. En su lugar emplee fgets()
siempre que pueda."
Saludos,
Bel�n
-------------------------------------------------------------------------
Ana Bel�n Barrag�ns Mart�nez
Departamento de Enxe�er�a Telem�tica
E.T.S.E. Telecomunicaci�n Tlf: +34-986812181
Campus As Lagoas-Marcosende Fax: +34-986812116
36200 - Vigo mailto: [EMAIL PROTECTED]
Pontevedra (Spain) URL: http://www-gris.det.uvigo.es/~belen
-------------------------------------------------------------------------