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
-------------------------------------------------------------------------



Responder a