Question

J'ai un descripteur de fichier ouvert pour la lecture qui peut être non-blocage. Ce que je dois faire est de simplement lire toutes les données jusqu'à atteindre EOF et écrire que les données à un descripteur de fichier en écriture. Le processus qui exécute cette copie n'est pas « conscient » de tout ce qui se passe autour d'elle, je ne pense pas que je puisse faire quelque chose d'utile en attendant les données, et je ne veux pas utiliser une boucle de while (en errno n'est pas EAGAIN) parce que je pense que ce serait du gaspillage. Est-il possible de bloquer ou de suspendre autrement l'exécution du processus jusqu'à ce que la copie des données seront disponibles?

Était-ce utile?

La solution

Votre autre réponse simplement O_NONBLOCK met à l'arrêt, qui définit le fichier à blocage. C'est parfaitement bien, si cela fonctionne dans votre situation; mais sinon, vous pouvez utiliser select() au bloc jusqu'à ce que votre descripteur de fichier non-bloquant est lisible.

Autres conseils

Chapitre 7 du Manuel de Linux SCSI générique (sg) donne une exemple de comment faire ceci:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top