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