2014-10-31 558 views
2

是否可以創建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

回答

3

人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

0

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位進程訪問它,我不會有什麼行爲。