La primitive poll fournit un service proche de select avec une autre forme d'interface.
#include <stropts.h>
#include <poll.h>
int poll(struct pollfd fdarray[],
unsigned long nfds,
int timeout
);
struct pollfd {
int fd;
short events;
short revents;
};
Ici on spécifie la liste de descripteurs et ce que l'on veut sur chacun d'eux.
La valeur de retour est -1 en cas d'erreur, 0 si le temps d'attente timeout est écoulé, ou un entier positif indiquant le nombre de descripteurs pour lesquels poll a changé la valeur du champ revents.
Les évènements sont ici:
Pour les évènements de events:
Pour les revents (valeurs de retour de la primitive poll):
Le mode de blocage de la primitive poll dépend du paramètre timeout
stropts.h.
Un Exemple
Attente de données sur ifd1 et ifd2, de place pour écrire sur ofd, avec un
délai maximum de 10 seconds:
#include <poll.h>
struct pollfd fds[3];
int ifd1, ifd2, ofd, count;
fds[0].fd = ifd1;
fds[0].events = POLLNORM;
fds[1].fd = ifd2;
fds[1].events = POLLNORM;
fds[2].fd = ofd;
fds[2].events = POLLOUT;
count = poll(fds, 3, 10000);
if (count == -1) {
perror("poll failed");
exit(1);
}
if (count==0)
printf("Rien `
n");
if (fds[0].revents & POLLNORM)
printf("Données a lire sur ifd%d`
n", fds[0].fd);
if (fds[1].revents & POLLNORM)
printf("Données a lire sur ifd%d`
n", fds[1].fd);
if (fds[2].revents & POLLOUT)
printf("De la place sur fd%d`
n", fds[2].fd);
Next: Les extensions de read Up: Les outils de sélection Previous: La primitive select
Dominique REVUZ