Bnojour à tous,

J'aurais besoin de votre aide pour un petit bout de code.
J'ai un programme qui va créer plusieurs fils, et les gérer via des sémaphores et autres joyeusetés. Ce programme a donc besoin d'allouer de la mémoire commune pour que les processus puissent communiquer.

Pour l'allocation, j'utilise le code ci-dessous :
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
 
	int* data;
	int* nb_lus;
 
	key = ftok(CLE,'R');
	if(key == (key_t)-1){
		perror("ftok:key");
		exit(1);
	}
 
	shmid = shmget(key, 1024, 0666 | IPC_CREAT);
 
	// Même chose pour le nombre de processus ayant lu les données
	nb_lus = shmat(shmid, (char*)0, 0);
	if(nb_lus == (int*)(-1)){
		perror("shmot:nb_lus");
		exit(1);
	}
 
	data = shmat(shmid, (char*)0, 0);
	if(data == (int*)(-1)){
		perror("shmot:data");
		exit(1);
	}
 
	*data = 1;
	*nb_lus = 2;
 
	printf("Init::%d,%d\n",*nb_lus,*data);
J'ai donc deux pointeurs qui sont récupérés via shmat, auxquels je donne des valeurs différentes, et j'en affiche la valeur à la fin.

Le problème, c'est que la sortie est la suivante :Conclusion: shmat m'a renvoyé deux fois le même pointeur.

Pouvez-vous m'aider à faire en sorte que shmat alloue deux segments de mémoire différents ? Merci d'avance