gpt4 book ai didi

c++ - 拒绝从非 fork 进程访问共享内存

转载 作者:IT王子 更新时间:2023-10-29 01:09:49 24 4
gpt4 key购买 nike

我需要创建一个包含一些 secret 数据的共享内存段。我使用 shmgetshmat 函数访问具有 0600 权限的段。我只想与 fork 进程共享这段内存。我尝试创建另一个应用程序来尝试访问该段,但没有成功,所以它看起来像我想要的那样工作。

但是当我再次运行创建段的应用程序时,它可以访问该段。这怎么可能?将 secret 数据存储到共享内存中是个好主意吗?

最佳答案

您可以 mmap()通过在父进程中提供 MAP_SHAREDMAP_ANONYMOUS 标志来共享和匿名内存区域。该内存只能由该进程及其子进程访问。由于内存段是匿名的,没有其他进程可以引用它,更不用说访问/映射它了:

void *shared_mem = mmap(NULL, n_bytes, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

父进程应该使用mmap() 创建共享内存段。该内存段由 fork() 创建的任何子进程继承。子进程可以简单地使用从父进程继承的 shared_mem 指针来引用该内存段:

#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
void *shared_mem = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

pid_t pid = fork();
if (pid > 0) {
// parent
// use shared_mem here

} else if (pid == 0) {
// child
// use shared_mem here

} else {
// error
}
return 0;
}

关于c++ - 拒绝从非 fork 进程访问共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738357/

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