Come condividere la memoria tra fork di processo ()?

In fork fork, se modifichiamo una variabile globale, non verrà modificata nel programma principale.

C’è un modo per cambiare una variabile globale in fork figlio?

#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. } 

È ansible utilizzare la memoria condivisa ( shm_open() , shm_unlink() , mmap() , ecc.).

 #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; } 

La modifica di una variabile globale non è ansible perché il nuovo processo creato (figlio) sta avendo il proprio spazio di indirizzamento.

Quindi è meglio usare shmget() , shmat() da POSIX api

Oppure È ansible utilizzare pthread , poiché i pthreads condividono i dati global e le modifiche nella variabile globale si riflettono in parent.