Essayer d’écrire dans un int en mémoire partagée (à l’aide de mmap) avec un processus enfant

Je joue avec du code qui nécessite une communication entre un parent et un processus enfant créé. J’ai créé un int dans la mémoire partagée avant le fork, mais les modifications apscopes avec le processus enfant ne semblent pas avoir d’incidence sur l’int lorsque le processus parent y accède. Voici un morceau de code qui illustre mon problème.

int * shared = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); pid_t child; int childstate; if((child=fork())==0){ *shared = 1; exit(0); } waitpid (child, &childstate, 0); printf("%d",*shared); 

Bien que le processus enfant atsortingbue la valeur 1 à ‘partagé’, ce programme génère 0.

Dans mon programme actuel, une structure sera partagée au lieu d’un entier, mais si je peux comprendre cet extrait de code, je pense que le rest devrait se mettre en place.

Je ne suis en aucun cas un programmeur expérimenté et je ne connais pas très bien C. J’ai passé des heures à essayer de comprendre cela et à lire des dizaines de pages qui disent que ce devrait être un processus simple. Pour être honnête, ça a été un coup dur pour mon estime de soi :). Je suis sûr qu’il me manque un petit détail. Quelqu’un peut-il me le signaler? Merci d’avance pour votre temps.

Votre problème concerne les indicateurs passés dans mmap() , vous voulez MAP_SHARED .

 int * shared = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); 

Fonctionne comme prévu avec le code ci-dessous

 #include  #include  #include  #include  int main(void) { int * shared = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); pid_t child; int childstate; printf("%d\n", *shared); if((child=fork())==0){ *shared = 1; printf("%d\n", *shared); exit(0); } waitpid (child, &childstate, 0); printf("%d\n",*shared); } 

Sortie:

 0 1 1 

La page de manuel mmap peut vous aider si vous ne l’avez pas déjà trouvée.