fork的共享内存

Igu*_*amu 2 c unix memory fork shared

我想在两个进程之间创建一个共享内存.我用了fork().一个孩子试图改变这个共享记忆,母亲创造另一个孩子,所以新孩子试图改变相同的记忆.这是我在C编程中的代码.(Ubuntu的)

mylist ch=NUL; 
f=fork();
if(!f){
        pba=shmget(KEYSHM,sizeof(char),0); /*created shared memory*/
        ch=(mylist *) shmat(pba,0,0);
        ch->name=ugur;
        ch->surname=cedric;
...do something...
}
else{
        if(ch)
        printf("this is top of mylist %s"ch->name);
.......do something
}
Run Code Online (Sandbox Code Playgroud)

它永远不会写ch-> name.为什么?我创建了一个共享内存.为什么父进程无法读取?

Jon*_*ler 5

对于要共享的内存,父级和子级必须访问相同的共享内存.

你有两个选择,越简单越难:

  • 在分叉之前创建并附加到共享内存.父和子都可以自动访问相同的共享内存.

  • 首先fork,然后父和子必须分别附加到共享内存.一旦进程分叉,它们就不再共享内存,特别是,在父进程中无法访问子进程中分配的任何内容.

您需要分配超过1个字符的共享内存来存储有用的字符串,如名称.