如何在Process叉()之间共享内存?

如何在Process叉()之间共享内存?

在叉子程序中,如果我们修改一个全局变量,它将不会在主程序中被更改。

有办法改变子叉中的全局变量吗?

#include <stdio.h>#include <stdlib.h>#include <unistd.h>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.}


慕斯王
浏览 426回答 3
3回答

弑天下

您可以使用共享内存(shm_open(),&nbsp;shm_unlink(),&nbsp;mmap()等等)。#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>#include&nbsp;<sys/mman.h>#include&nbsp;<sys/types.h>#include&nbsp;<sys/wait.h>#include&nbsp;<unistd.h>static&nbsp;int&nbsp;*glob_var;int&nbsp;main(void){ &nbsp;&nbsp;&nbsp;&nbsp;glob_var&nbsp;=&nbsp;mmap(NULL,&nbsp;sizeof&nbsp;*glob_var,&nbsp;PROT_READ&nbsp;|&nbsp;PROT_WRITE,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAP_SHARED&nbsp;|&nbsp;MAP_ANONYMOUS,&nbsp;-1,&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;*glob_var&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fork()&nbsp;==&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*glob_var&nbsp;=&nbsp;5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(EXIT_SUCCESS); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wait(NULL); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;*glob_var); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;munmap(glob_var,&nbsp;sizeof&nbsp;*glob_var); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}
打开App,查看更多内容
随时随地看视频慕课网APP