gpt4 book ai didi

c++ - 共享内存 API,其中一个进程可以将共享内存附加到其他进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:59 25 4
gpt4 key购买 nike

任何人都可以调查一下并向我推荐一个 API。

我们有一个进程的 API,它可以创建和/或附加一个共享内存到它自己的进程。但是我没有找到一个 API 来通过其他进程将共享内存附加到一个进程(例如,进程 A 应该调用一个 API(如 shmat())来将共享内存附加到进程 B)。

最佳答案

共享内存不属于任何特定进程(除非您使用私有(private)IPC_PRIVATE key 创建它)。它属于系统。

因此,当您将 shmget 与非私钥(和 IPC_CREAT 标志)一起使用时,您将创建一个共享内存块或附加到现有内存块.

您需要一种方法让两个进程使用相同的 IPC key ,这通常通过使用 ftok 来完成,它使用文件规范和标识符为您提供 IPC key 以供在 shmget 调用(以及其他 IPC 类型调用,例如 msggetsemget)。

例如,在程序pax1pax2 中,您可能有如下代码段:

int getMyShMem (void) {
key_t mykey = ftok ("/var/pax.cfg", 0); // only one shm block so use id of 0
if (mykey == (key_t)-1) // no go.
return -1;
return shmget (mykey, 1024, IPC_CREAT); // get (or make) a 1K block.
}

通过让两个进程使用相同的文件规范和 ID,它们将获得相同的共享内存块。

您可以使用不同的 ID 为您提供完全基于同一文件的不同共享内存块(例如,您可能想要一个用于配置共享内存块,另一个用于存储共享状态)。

而且,鉴于它是 IPC key 所基于的您的配置文件,其他程序使用它的机会微乎其微(我认为它可能为零,但我不是 100% 确定) .

您不能从该进程外部强行将共享内存注入(inject)该进程(好吧,您可以这样做,但这既危险又需要各种根级权限)。这会破坏 protected 进程模型,并将您的系统变成与 MS-DOS 一样安全的系统:-)

关于c++ - 共享内存 API,其中一个进程可以将共享内存附加到其他进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073566/

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