父级:
shm_id = shmget(IPC_PRIVATE, (1 << 16), IPC_CREAT | IPC_EXCL | 0777);
setenv("SOME_ENV_VAR",stringof(shm_id);
if(fork()=0){
execve(some_path,argv);
}
孩子:
int shm_id = atoi(getenv("SOME_ENV_VAR"));
int *shared_mem = (int*)shmat(shm_id,0,NULL);
if(!shared_mem)
return;
shared_mem[0]++;
我希望在子进程中编辑共享内存。有什么原因不能做到?我通过shmget在父进程中分配了共享内存块。我将shm_id作为环境变量放置在fork和exec后供子进程读取。
在子进程中,我正在读取正确的shm_id,然后尝试通过shmat获取指向共享内存的指针。在我的代码中,我已经验证了父进程和子进程中的shm_id是相同的... 有什么想法吗?
shmat
(在fork
之后执行此操作)。如果您需要更多帮助,请提供完整的程序,以便我们可以编译并运行它们,并告诉我们在运行它们时实际发生了什么,以及这不是您所期望的。 - zwolshm_open
及其相关函数,而不是shmget
及其相关函数。 - zwol