Bonjour, je bloque depuis plus d'une semaine sur un TP, le prof ne donne pas de correction et j'aurai grandement besoin de le réussir pour réviser en vue du test. La consigne est simple : réaliser un anneau de n processus (passé par argv[1]) qui donnent leur pid au processus suivant.
J'en suis rendu à avoir une file de processus qui transmettent leur pid au suivant mais le processus n ne peut pas transmettre au processus 1.
Je vois bien que mon code ne permet pas aux processus de former une boucle mais je n'arrive pas à comprendre comment le transformer pour y parvenir.
Voici le code en question :
Merci de votre aide
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
45
46
47
48
49
50
51
52
53
54 //écrire la mise en place de l'anneau de n proc #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/wait.h> int main (int argc, char* argv[]) { if(argc != 2) { printf("Nombre d'arguments incorrect\n"); exit(1); } int out, in, i, k; int n = atoi(argv[1]); int* t = (int*)malloc(2*n*sizeof(int)); //0 : out; 1 : in for(i = 0; i<n; i++) { pipe(&t[2*i]); if(fork()==0) { printf("processus : %d\n", i+1); //fermeture for(k = 0; k<2*n; k++) { if(k != 2*i+1 && k != 2*i-2) // si k : out ET pas out du precedent { if((i == 0 && k != 2*n-1) || i != 0) // proc 0 : ne ferme pas le in du dernier proc { //printf("fermeture processus : %d\n", k); close(t[k]); } } } //transfert des ids in = getpid(); write(t[2*i+1], &in, 4); read(t[2*i-2], &out, 4); printf("In : %d\n", in); printf("Out : %d\n", out); exit(0); } wait(NULL); } free(t); exit(0); }![]()
Partager