2016-04-20 60 views
0

的boost ::進程間將建立這樣的SHM:如何從一個boost ::進程間:: managed_shared_memory對象的shmid

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "ContainerSharedMemory", 65536); 

,但怎麼能關注此SHM這樣的:

/Tool/SHMCache$ ipcs -m 

key  shmid  owner  perms  bytes  nattch  status  
0x00005feb 0   root  666  12000  2      
0x00005fe7 32769  root  666  524288  2      
0x00005fe8 65538  root  666  2097152 2      
0x0001c08e 98307  root  777  2072  0       

回答

1

managed_shared_memory用於跨平臺使用,它使用BasicManagedMemoryImpl指針指向不同操作系統上的內部實現。例如,它在Windows上使用basic_managed_windows_shared_memory作爲後端。爲了便於攜帶,managed_shared_memory沒有獲取shmid的方法。如果您的操作系統支持系統V共享內存,則可以使用basic_managed_xsi_shared_memory,該方法具有get_shmid()方法以及與basic_managed_shared_memory幾乎相同的接口。一個簡單的例子:

#include <boost/interprocess/xsi_shared_memory.hpp> 
#include <boost/interprocess/mapped_region.hpp> 

using namespace boost::interprocess; 

int main(int argc, char *argv[]) 
{ 
    //Build XSI key (ftok based) 
    xsi_key key(argv[0], 1); 
    //Create a shared memory object. 
    xsi_shared_memory shm (create_only, key, 1000); 
    // TODO Remove if exists 
    printf("shmid: %d\n", shm.get_shmid()); 
} 

然後你可以看到它與ipcs -m如果共享內存已成功創建。

+0

非常感謝!和linux?boost文檔似乎沒有提到這 –

+0

系統V完全受Linux內核支持。當然,你可以在linux上運行簡單的程序。 – jfly

+0

謝謝,我會試試這個。我怎麼能得到更多關於managed_shared_memory的詳細信息 –