在32位和64位进程之间共享共享内存段

问题描述:

是否可以创建32位和64位进程都可以访问的共享内存段。支持64位寻址的标志'TPF_IPC64'如下在32位和64位进程之间共享共享内存段

shmget(key,100,IPC_CREAT|TPF_IPC64); 

这是可以从32位Linux进程访问吗?

编辑:看起来标志'TPF_IPC64'不支持在正常的Linux操作系统调用shmget。我认为这是IBM的一些专有权(我的不好)。我把它从该链路

http://pic.dhe.ibm.com/infocenter/tpfhelp/current/index.jsp?topic=%2Fcom.ibm.ztpf-ztpfdf.doc_put.cur%2Fgtpc2%2Fcpp_shmget.html

人shmget的(2)

如果IPC_CREAT在shmflg创建可以 仅由相同的可执行类型的方法被共享的共享存储器段设置。也就是说,编译为32位进程的 应用程序将能够与其他32位进程共享相同的内存段,并且编译为64位进程的应用程序 将能够共享相同的内存 分段与其他64位进程。如果64位位进程想要 创建一个共享内存段,该进程段也可以与32位 进程共享,则64位进程必须在shmflg中指定IPC_SHARE32和 IPC_CREAT。 32位进程无需指定 IPC_SHARE32。在基于Itanium(R)的平台上,如果正在使用自适应地址空间功能,则可能会应用其他规则。有关自适应地址空间,请参阅下面的 部分。

+0

我在我的shmget手册页中没有看到这个。另外IPC_SHARE32不被识别。我可以在一些惠普文档中找到它。你能给我更多关于如何使用它的细节吗? – Nuetrino 2014-10-31 14:36:16

+0

http://man7.org/linux/man-pages/man2/shmget.2.html – 2014-11-01 16:04:13

+0

我在您提供的链接中看不到IPC_SHARE32 – Nuetrino 2014-11-03 08:35:40

IBM's文件

TPF_IPC64 Specifies that 64-bit addressing is supported. If you specify this flag, 64-bit system heap is used to satisfy the request if there is enough heap available. If there is no 64-bit system heap space available, 31-bit system heap will be used. Specify this flag only if all the users of this shared memory area can support 64-bit addresses.

最后一句提到,所有的过程必须支持64位地址。所以使用32位地址的进程无法访问它。

但是,如果您尝试使用32位进程访问它,我不会有什么行为。