2013-01-17 86 views
2

默認情況下,Boost會使用System V共享內存並創建文件進行通信。我希望它使用POSIX共享內存。強制升級使用POSIX共享內存而不是System V?

他們是強制使用POSIX共享內存而不是嘗試創建文件的方法嗎?

是否必須更改源代碼(Boost.Interprocess)中的內容?

我在OS X(10.6,10.7和10.8)的項目中使用1.46.1版本的boost。但我也可以使用1.52.0。在遷移之前,我想知道是否可以做到。

+0

哪個提升庫會這樣? –

+0

我更新了我的問題。我正在使用1.46.1。 – MacGeek

+0

我指的是提升的哪一部分?我最好的猜測是Boost.Interprocess –

回答

1

從文檔中,Boost Interprocess將在可用時使用POSIX。深入挖掘它,似乎在Max OSX上它並不是因爲實現有一些不符合規定的行爲(根據標題)。以下是boost/interprocess/detail/workaround.hpp的代碼。

//Check for XSI shared memory objects. They are available in nearly all UNIX platforms 
    #if !defined(__QNXNTO__) 
     #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS 
    #endif 

    #if defined(_POSIX_SHARED_MEMORY_OBJECTS) && ((_POSIX_SHARED_MEMORY_OBJECTS - 0) > 0) 
     #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS 
    #else 
     //VMS and MACOS don't define it but they have shm_open/close interface 
     #if defined(__vms) 
     #if __CRTL_VER >= 70200000 
      #define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS 
     #endif 
     //Mac OS has some non-conformant features like names limited to SHM_NAME_MAX 
     #elif defined (__APPLE__) 
     //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS 
     //#define BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS_NO_GROW 
     #endif 
    #endif 
+0

我試着用posix共享內存對象編寫一些示例代碼,它們很好地工作。這只是提升事情變得更容易。 – MacGeek

+0

@MacGeek:我確定它的工作非常密切,我很好奇爲什麼,但目前的(Boost 1.52)頭文件默認情況下不會啓用它。你可能能夠定義'BOOST_INTERPROCESS_POSIX_SHARED_MEMORY_OBJECTS',但我不知道它能夠如何工作。 –

+0

我試過了。寫入過程可以創建SM對象並初始化它,另一方面,讀取過程可以創建SM對象,但在ftruncate(m_handle,length)期間失敗; – MacGeek