J'essaie de partager deux blocs différents en utilisant un bloc de mémoire partagée en utilisant la bibliothèque shm.h. J'ai écrit l'exemple suivant, où un bloc de mémoire partagée est créé et est assez grand pour contenir deux entiers. Je lui attache ensuite deux nombres entiers et crée deux processus. Le premier processus incrémente le premier entier. Le deuxième processus imprime ensuite la valeur de deux entiers. Mais ce qui se passe est que les deux entiers sont incrémentés.Partage de plusieurs variables via sys/shm.h
Qu'est-ce que je fais mal? Je viens de commencer à apprendre à utiliser la bibliothèque shm.
Voici le code:
#include <sys/sem.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <stdio.h>
#include <unistd.h>
int main() {
// Declare variables
int shmID;
int *data1;
int *data2;
// Create a shared memory segment
if((shmID=shmget(IPC_PRIVATE, 2*sizeof(int), 0666 | IPC_CREAT))<0)
{
fprintf(stderr,"Problem initializing shared memory\n");
perror("main");
return -1;
}
if((data1=shmat(shmID,NULL,0))==(int *)-1)
{
fprintf(stderr,"Problem attaching memory 1\n");
perror("main");
return -1;
}
if((data2=shmat(shmID,NULL,0))==(int *)-1)
{
fprintf(stderr,"Problem attaching memory 2\n");
perror("main");
return -1;
}
printf("%p %p\n",data1,data2);
(*data1)=0;
(*data2)=0;
if(fork())
{ // Process 1 will be the incrementer
for(int i=0;i<100;i++)
{
(*data1)++;
printf("IN: %d\n",(*data1));
sleep(1);
}
printf("IN DONE\n");
}
else
{
while((*data1)<50)
{
printf("OUT: %d %d\n",(*data1),(*data2));
sleep(1);
}
printf("OUT DONE\n");
}
}
Et ceci est la sortie:
0x7fcd42a97000 0x7fcd42a96000
IN: 1
OUT: 1 1
IN: 2
OUT: 2 2
IN: 3
OUT: 3 3
Je courais sur cette Gentoo Linux.
Merci, qui a travaillé. – kkrizka