2

Boost はデフォルトで System V 共有メモリを使用し、通信用のファイルを作成します。POSIX共有メモリを使用したい。

ファイルを作成しようとする代わりに、POSIX 共有メモリを使用するようにブーストを強制する方法はありますか?

ソース コード (Boost.Interprocess) を変更する必要はありますか?

OS X (10.6、10.7、および 10.8) のプロジェクトで 1.46.1 バージョンのブーストを使用しています。しかし、1.52.0 も使用できます。移行する前に、それが可能かどうかを知りたいです。

4

1 に答える 1

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
于 2013-01-17T17:17:29.893 に答える