Pregunta

Tengo un descriptor de archivo que está abierto para la lectura que puede ser no bloqueante. Lo que tengo que hacer es simplemente leer todos los datos hasta alcanzar EOF y escribir los datos a un descriptor de archivo de escritura. A medida que el proceso que realiza esta copia no es "consciente" de todo lo que está pasando alrededor de ella, no creo que pueda hacer algo útil a la espera de los datos, y yo no quiero utilizar un bucle while (mientras errno no es EAGAIN) porque creo que sería un desperdicio. ¿Hay una manera de bloquear o de otra manera, suspender la ejecución del proceso de copia hasta que se disponga de datos?

¿Fue útil?

Solución

Su otra respuesta simplemente desarma O_NONBLOCK, que fija la parte posterior archivo de bloqueo. Eso es perfectamente bien, si funciona en su situación; pero si no, se puede utilizar select() al bloque hasta que su bloqueo no descriptor de archivo es legible.

Otros consejos

Capítulo 7 del COMO genérico SCSI de Linux (SG) da una ejemplo de cómo hacer esto:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top