CUESTIÓN
¿Qué puede estar fallando aquí?:
if(i=read(fd,buffer,longitud)==-1)
{sprintf(etiqueta,"%s:%s",argv[0],argv[1]);
perror(etiqueta);
return 1;}
printf("longitud=%d\n",i);
Siempre me pone que read lee cero caracteres, por más que
la longitud que pongo sea mayor que cero y el búfer
esté bien definido.
SOLUCIÓN
Es bastante habitual combinar varias sentencias en C en una única, pero
hay que tener cuidado con la precedencia de los operadores. El
problema está en el if
. El operador de comparación de
igualdad de C (==
) tiene mayor precedencia que el operador
de asignación (=
). Por lo tanto en el if
,
primero se ejecuta la llamada read
, luego se mira si
valor devuelto es -1 y el resultado lógico de esta comparación
(0-> falso o 1-> verdadero) se asigna a la variable i
.
La línea correctamente escrita quedaría:
if ( (i=read(fd,buffer,longitud)) ==-1)
{sprintf(etiqueta,"%s:%s",argv[0],argv[1]);
o, para mi gusto, mucho más clara:
i=read(fd,buffer,longitud);
if (i==-1)
{sprintf(etiqueta,"%s:%s",argv[0],argv[1]);
© 2000 Guillermo González Talaván.