Mémoire commune entre deux processus - shmat
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:
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 :)