Domanda

Ho un descrittore di file che è aperto per la lettura che può essere non bloccante. Quello che devo fare è semplicemente leggere tutti i dati fino a raggiungere EOF e scrivere i dati in un descrittore di file scrivibile. Poiché il processo che esegue questa copia non è "consapevole" di tutto ciò che sta succedendo intorno a esso, non credo che io possa fare qualcosa di utile durante l'attesa per i dati, e io non voglio usare un ciclo while (mentre errno non è EAGAIN) perché penso che sarebbe uno spreco. C'è un modo per bloccare o sospendere l'esecuzione del processo di copia fino a quando diventano disponibili i dati?

È stato utile?

Soluzione

Il tuo altra risposta disinserisce semplicemente O_NONBLOCK, che imposta il file indietro al blocco. Questo è perfettamente bene, se funziona nella vostra situazione; ma se non è possibile utilizzare select() al blocco fino a quando il non-blocking descrittore di file è leggibile.

Altri suggerimenti

capitolo 7 della (sg) Linux HOWTO SCSI Generico dà un esempio di come fare questo:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top