Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
2278 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] question sur select()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] question sur select()

n°931593
farib
Posté le 24-12-2004 à 19:33:40  profilanswer
 

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 :
  1. while (1)
  2. {
  3.     FD_ZERO'(&set)
  4.     for ( int i=0 ; i<4 ; i++)
  5.         FD_SET(fd[i],&set);
  6.     select(FD_MAX,&set,NULL,NULL,NULL);
  7.     for ( int i=0 ; i<4 ; i++)
  8.     {
  9.         if (FD_ISSET(fd[i],&set))
  10.              read();
  11.              //blah blah
  12.              do_some_stuff()
  13.     }
  14. }

 
 
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
mood
Publicité
Posté le 24-12-2004 à 19:33:40  profilanswer
 

n°933257
hoov
Posté le 28-12-2004 à 21:22:26  profilanswer
 

read() est bloquant sur un pipe vide.
 
Je ne sais pas si ske tu dis est juste mais tu px tester :
Tu fais un test avec 2 tubes
Tu ecris sur le premier
Gros sleep dans do_some_stuff()
Tu ecris sur le second, tu vois au retour du sleep :D  
 
Sinon si tu vx juste afficher le contenu de plusieurs tubes dès que tu ecris dessus, tu px utiliser des threads.

n°934553
rolphin
Posté le 31-12-2004 à 11:19:23  profilanswer
 

> read() est bloquant sur un pipe vide.
 
Non par forcément, suffit de mettre le fd en O_NONBLOCK
fnctl(FD_SETFL, O_NONBLOCK ...)  
 
Du coup read sort tout de suite et positionne errno à EAGAIN.
 
man read...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] question sur select()

 

Sujets relatifs
[JSF ou Struts] telle est ma Question ???une question certainement facile pour certains mais moi je sèche
SELECT MIN(date) marche pas !!!!Threads - 1 autre question sur interface graphique
Question à propos d'une fonction du htacces de PHPNuke[C] question sur read()
[Sockets] question sur les sockets ....[CSS] modifier la couleur de la scrollbar d'un select
Question programmation sous dream.Question C++ (Modélisation
Plus de sujets relatifs à : [C] question sur select()


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware