Entonces, recientemente vi un fragmento de código C como el siguiente:

int result, input;


result = read(fd, (char*)&input, sizeof(input));

if(result == sizeof(int)) return input;

¿Qué hace la comparación result == sizeof(int)?

2
user6922712 6 mar. 2018 a las 22:48

3 respuestas

La mejor respuesta

read devuelve el número de bytes leídos (o -1 en caso de error). El código intenta leer un int de una transmisión y se asegura de que el read funcionó correctamente.

3
ikegami 6 mar. 2018 a las 19:50

read devuelve el número de bytes leídos.

En algunos casos (fin de archivo, error de disco, tubería rota), read podría devolver menos del tamaño del entero solicitado en la llamada, o -1 para indicar un error.

Eso es solo un control de cordura para garantizar la integridad de input

Personalmente hubiera preferido probar con sizeof(input) debido al tipo de cambios input para short o double, entonces el código detecta erróneamente un problema de tamaño de lectura.

2
Jean-François Fabre 6 mar. 2018 a las 19:57

Esto lo hace más claro

int readLength;
int readData; // or long, float, ...

readLength = read(fd, (char*)&readData, sizeof(readData));

if(readLength == sizeof(readData)) // Do something

El código original se rompió debido a su reutilización de result

0
pm100 6 mar. 2018 a las 19:55