Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pipe non bloquant

1 réponse
Avatar
Vincent Courcelle
Bonjour,
malgré toutes mes recherches, je n'arrive pas à créer un pipe non blocant,
c'est à dire que quand le consommateur n'a rien à lire, je ne veux pas qu'il
reste bloqué sur le read mais qu'il passe aux instructions suivantes
exemple :
int fd[2];
pipe(fd);
read(fd[0],&buffer,sizeof(char));
printf("c'est pas bloquant ! y a juste rien dans le pipe et buffer est vide
!!");


suis-je obligé de passer par un thread qui regarde mes pipe et met à jour
une variable partagée avec son père quand il lit quelque chose ?
merci de votre aide !


--

Vincent Courcelle
http://www.tubededentifrice.com et http://www.france-jeunes.net

1 réponse

Avatar
Olivier Azeau
Vincent Courcelle wrote:
Bonjour,
malgré toutes mes recherches, je n'arrive pas à créer un pipe non blocant,
c'est à dire que quand le consommateur n'a rien à lire, je ne veux pas qu'il
reste bloqué sur le read mais qu'il passe aux instructions suivantes
exemple :
int fd[2];
pipe(fd);
read(fd[0],&buffer,sizeof(char));
printf("c'est pas bloquant ! y a juste rien dans le pipe et buffer est vide
!!");


Cette question aurait plus sa place dans un fr.comp.os.* car les
comportements des appels systèmes dépendent des plateformes...

Cherche probablement du coté d'un flag O_NONBLOCK à positionner avec fcntl

suis-je obligé de passer par un thread qui regarde mes pipe et met à jour
une variable partagée avec son père quand il lit quelque chose ?
merci de votre aide !


Non, mais une question à se poser c'est pourquoi aller lire dans un pipe
alors que l'on n'est pas sûr d'y trouver quelque chose (typiquement,
utilisation de "select")