gpt4 book ai didi

c - fork() 之后无法从子进程检索 mmap 共享内存

转载 作者:行者123 更新时间:2023-11-30 15:42:29 25 4
gpt4 key购买 nike

更新:我无法使其正常工作并采取了不同的方法。正如 @nos 指出的那样,问题不在于这段代码,而在于其他地方。 ArrayList 在其实现中分配内存,但这不是我们分配的共享内存的一部分。感谢您的回复。

原始问题:

我有一个 fork 。我的目标是让子进程填充一个数据结构(db - 它是一个 ArrayList - 外部实现),然后能够从父进程读取该数据结构。目前,结果是段错误,因为父进程中的数据结构为空。

这是代码:

    static ArrayList *db;
pid_t child_pid, pid;
int child_status;

//set up shared memory structure
db = mmap(NULL, 20000, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);


child_pid = fork();
if(child_pid == 0) {

//Some operations to initialize and populate db happen here. This works fine.


//printAll(db, 1); //THIS would work. But I want to do this from the parent
exit(0);

} else {
//wait for child process to finish

do {
pid = wait(&child_status);

} while(pid != child_pid);




printAll(db, 1);//THIS IS WHERE IT SEGFAULTS, because db is not initialized - so it was never properly retrieved from mmap
munmap(db, 20000); //fixed this



}

最佳答案

 munmap(db, 20000);

printAll(db, 1);//T//THIS IS WHERE IT SEGFAULTS,

这并不特别令人惊讶,您取消了其上方一行上的内存映射。

关于c - fork() 之后无法从子进程检索 mmap 共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155800/

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