gpt4 book ai didi

c - 如何在 fork() 创建的进程之间共享内存?

转载 作者:太空狗 更新时间:2023-10-29 16:17:44 28 4
gpt4 key购买 nike

在fork child中,如果我们修改了一个全局变量,它不会在主程序中改变。

有没有办法在子 fork 中更改全局变量?

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

最佳答案

您可以使用共享内存(shm_open()shm_unlink()mmap() 等)。

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

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

关于c - 如何在 fork() 创建的进程之间共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274786/

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