6 votes

Mémoire partagée avec deux processus en C ?

Je veux faire ce qui suit :

Le processus parent crée un processus enfant. Ensuite, le processus enfant lit n int de l'utilisateur et les stocke dans une mémoire partagée. Le processus parent les affiche ensuite.

Je suis parvenu à ce qui suit :

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#define SHMSIZE 27
int main() {
   int shmid;
   int *shm;
   int *n;

   if(fork() == 0) {
      shmid = shmget(2009, SHMSIZE, 0);
      shm = shmat(shmid, 0, 0);
      n = shm;
      int i;
      for(i=0; i<5; i++) {
         printf("Enter number<%i>: ", i);
         scanf("%d", n++);
      }
      printf ("Child wrote <%d>\n",shm);
      shmdt(shm);
   }
   else {
      wait();
      int *s;
      shmid = shmget(2009, SHMSIZE, 0666 | IPC_CREAT);
      shm = shmat(shmid, 0, 0);
      s = shm;
      wait(NULL);
      printf ("Parent reads <%d>\n",shm) ;
      shmdt(shm);
      shmctl(shmid, IPC_RMID, NULL);
   }
   return 0;
}

Et la sortie est juste cette ligne :

Enter number<1>:

Et si je saisis un nombre, disons 25, ça donne ça :

Parent reads <r>

r : le nombre aléatoire -ve change à chaque fois que j'exécute le code

Il n'est jamais passé par le code du processus enfant ! Est-ce que je m'y prends mal ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X