gpt4 book ai didi

c - fork的共享内存

转载 作者:行者123 更新时间:2023-12-01 22:50:41 25 4
gpt4 key购买 nike

我想在两个进程之间创建一个共享内存。我使用了 fork()。一个 child 试图改变这个共享内存,而母亲创造了另一个 child ,所以新 child 试图改变同样的内存,依此类推。这是我在 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
}

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

最佳答案

要共享内存,父子必须访问相同的共享内存。

你有两个选择,一个更简单,一个更难:

  • 在 fork 之前创建并附加到共享内存。 parent 和 child 都可以自动访问同一共享内存。

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

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

关于c - fork的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com