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 :

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);
}
Merci de votre aide