The functions select and pselect wait for a number of file descriptors to change status. |
je suis pas sur de comprendre comme il faut le "change status"
supposons que j'ai un select()/read en boucle qui surveille un ensemble de pipes pour par exemple afficher sur la sortie standard leur contenu
si je fais
Code :
- while (1)
- {
- FD_ZERO'(&set)
- for ( int i=0 ; i<4 ; i++)
- FD_SET(fd[i],&set);
- select(FD_MAX,&set,NULL,NULL,NULL);
- for ( int i=0 ; i<4 ; i++)
- {
- if (FD_ISSET(fd[i],&set))
- read();
- //blah blah
- do_some_stuff()
- }
- }
|
supposons que des octets deviennent disponibles en lecture pendant que cette boucle est sur la partie "do_some_stuff()" (écrits sur les pipes par d'autres processus)
alors, le select au prochain passage ne les verra pas, parce qu'il ne voit qu'un changement de statut sur un filedescriptor ?
y'a t'il alors un moyen de tester en non bloquant si un fd a des octets disponibles en lecture ?
(en fait je me demande si c'est que c'est ce que fait read() avec un pipe vide, retourner direct sans bloquer)
sinon, quelle est la solution ?
Message édité par farib le 24-12-2004 à 19:42:37