La Mémoire Partagée Avec Deux Processus En C?

Je veux faire ce qui suit:

Processus père crée un processus fils. Ensuite, le processus de l'enfant lit n int de l'utilisateur et de les stocker dans une mémoire partagée. Le processus parent puis les affiche.

J'ai atteint le suivant:

#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 le résultat est juste cette ligne:

Enter number<1>:

Et si je suis entré dans un certain nombre, disons 25, il affiche ceci:

Parent reads <r>

r: aléatoire -ve numéro change à chaque fois que j'execute le code

Il n'est jamais allé à travers le processus de l'enfant code ! Suis-je le faire dans un mauvais sens ?

Pourquoi ne pas vous créer de la mémoire partagée dans le parent, puis exécutez l'enfant?
Qu'est-ce que le premier appel à wait dans le processus parent?
Aussi, votre argument scanf est faux.
C'est ce qui m'a demandé de le faire. Je préfère m'en tenir à cela.
wait() est de forcer les parents à attendre pour l'enfant à la fin. Quel est le problème avec scanf() ?

OriginalL'auteur iTurki | 2011-11-18