Bonjour voila y'a quelque chose que je n'arrive pas a comprendre je débute dans la programmation système :
voici mon code : il s'agit simplement de faire communiquer un processus père avec un processus fils
Pourquoi les printf("coucou"); ne s'exécutent pas?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <stdio.h> #include <stdlib.h> #include <unistd.h> void pipe_shell(char* argv1, char* argv2); int main(int argc,char* argv[]) { if(argc!=3) exit(-1); pipe_shell(argv[1],argv[2]); return EXIT_SUCCESS; } void pipe_shell(char* argv1, char* argv2) { int tube[2]; pipe(tube); pid_t result_fork=fork(); switch(result_fork) { case -1 : printf("Erreur creation processus\n"); exit(-1); case 0 : /*processus fils*/ printf("coucou"); close(tube[1]); dup2(tube[0],0); close(tube[0]); execl("/usr/bin/sort","sort",NULL); break; default : /*processus pere*/ printf("coucou"); close(tube[0]); dup2(tube[1],1); close(tube[1]); execl("/bin/ls","ls",NULL); } }
De plus si j'ai bien compris les processus sont tués dès que leurs instructions sont terminés mais admettons que le fils doit envoyer un message au père via un pipe; Admettons que ce soit au père de s'exécuter en premier il va terminer ses instructions, voyant qu'il n'y a rien à lire pour le moment et ne pourra pas lire ce que le fils lui envoie puis va mourir? mais dans la réalité les deux arrivent à communiquer donc quand un processus meurt-il réellement?Tourne t-il en boucle plusieurs fois de suite?Ou lors de l'accès en lecture d'un descripteur va t-il se mettre en pause jusqu'a ce qu'une donnée apparaisse?
Merci !
Partager