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 :
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.
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);
Le problème, c'est que la sortie est la suivante :Conclusion: shmat m'a renvoyé deux fois le même pointeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Init::2,2
Pouvez-vous m'aider à faire en sorte que shmat alloue deux segments de mémoire différents ? Merci d'avance![]()
Partager