Bonjour,
je dois faire un programme qui contient deux processus qui communiquent via des pipes. Le processus fils doit à la fois pouvoir lire sur un pipe et écrire sur un autre. Concrètement le fils doit envoyer une commande au père, qui l'exécute et écrit le résultat sur un autre pipe, puis le fils doit de nouveau lire sur l'autre pipe le résultat pour l'afficher. Pour cela j'utilise select() de cette façon:
Le problème que j'ai est que le select() ne retourne jamais avec la lecture possible sur pw[0]. J'ai essayé beaucoup de chose mais j'obtiens toujours un Bad file descriptor.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 pipe(pr); pipe(pw); ... fd_set r_fdset, w_fdset; FD_ZERO(&r_fdset); FD_ZERO(&w_fdset); FD_SET(pr[1], &w_fdset); FD_SET(pw[0], &r_fdset); max = (pr[1] > pw[0]) ? pr[1] : pw[0]; while(1) { state = select(max+1, &r_fdset, &w_fdset, NULL, NULL); if(state == -1) perror("select"); else if(state > 0) { if (FD_ISSET(pr[1], &w_fdset)) { printf("Ecriture\n"); } if (FD_ISSET(pw[0], &r_fdset)) { printf("Lecture\n"); } } else { printf("Rien\n"); } } ...
Merci pour voter aide.
Partager