Cómo compartir memoria entre proceso fork ()?

En fork niño, si modificamos una variable global, no cambiará en el progtwig principal.

¿Hay alguna manera de cambiar una variable global en el tenedor infantil?

#include  #include  #include  int glob_var; main (int ac, char **av) { int pid; glob_var = 1; if ((pid = fork()) == 0) { /* child */ glob_var = 5; } else { /* Error */ perror ("fork"); exit (1); } int status; while (wait(&status) != pid) { } printf("%d\n",glob_var); // this will display 1 and not 5. } 

Puede usar la memoria compartida ( shm_open() , shm_unlink() , mmap() , etc.).

 #include  #include  #include  #include  #include  #include  static int *glob_var; int main(void) { glob_var = mmap(NULL, sizeof *glob_var, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); *glob_var = 1; if (fork() == 0) { *glob_var = 5; exit(EXIT_SUCCESS); } else { wait(NULL); printf("%d\n", *glob_var); munmap(glob_var, sizeof *glob_var); } return 0; } 

No es posible cambiar una variable global porque el nuevo proceso creado (hijo) tiene su propio espacio de direcciones.

Entonces, es mejor usar shmget() , shmat() de POSIX api

O bien, puede usar pthread , ya que los pthreads comparten los datos global y los cambios en la variable global se reflejan en el elemento primario.