43 votes

Appel non bloquant pour la lecture du descripteur

J'ai un descripteur fd, que je peux utiliser pour lire en appelant read(fd, buffer,...) . Maintenant, je veux vérifier s'il y a quelque chose à lire avant de passer l'appel, car l'appel est bloqué. Comment puis-je faire cela?

14voto

R.. Points 93718

Utilisez select ou poll pour demander si le descripteur de fichier a des données disponibles pour la lecture :

 fd_set fds;
FD_ZERO(&fds);
FD_SET(&fds, fd);
if (select(fd+1, &fds, 0, 0)==1) /* there is data available */

2voto

mu is too short Points 205090

Selon ce que vous faites, vous pourrez peut-être retourner le problème et utiliser select pour vous dire quand votre descripteur de fichier a quelque chose à lire.

2voto

Ankur Soni Points 21
use poll for timeout:

struct pollfd p;
            int n;
            while ((n = poll(&p, 1, iTo)) < 0) 
              {
               if (errno == EAGAIN || errno == EINTR)
                   continue;
            }

            if (!n) {
                 errno = ETIMEDOUT;
                   }

        while ((len = read(Fd, anyBuff, sizeof(anyenter code hereBuff))) < 0) {
            if (errno == EAGAIN || errno == EINTR)
                continue;

        }

1voto

Elalfer Points 3825

Je pense que vous devriez utiliser les fonctions select ou poll pour vérifier s'il y a quelque chose à lire dans le descripteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X