OpenRTM-aist  2.1.0
SharedMemoryPort.h
[詳解]
1 // -*- C++ -*-
17 #ifndef SHAREDMEMORYPORT_H
18 #define SHAREDMEMORYPORT_H
19 
20 
21 #include <rtm/Manager.h>
22 #include <rtm/idl/SharedMemorySkel.h>
23 #include <coil/SharedMemory.h>
25 #include <rtm/ByteData.h>
26 
27 #define DEFAULT_DATA_SIZE 8
28 #define DEFAULT_SHARED_MEMORY_SIZE 2097152
29 
30 namespace RTC
31 {
55  : public virtual POA_OpenRTM::PortSharedMemory,
56  public virtual PortableServer::RefCountServantBase
57  {
58  public:
90  ~SharedMemoryPort() override;
111  virtual int string_to_MemorySize(std::string size_str);
129  void create_memory(::CORBA::ULongLong memory_size, const char *shm_address) override;
147  void open_memory(::CORBA::ULongLong memory_size, const char *shm_address) override;
161  void close_memory(::CORBA::Boolean unlink = false) override;
179  virtual void write(ByteData& data);
194  virtual void read(ByteData& data);
211  void setInterface(::OpenRTM::PortSharedMemory_ptr sm) override;
227  void setEndian(::CORBA::Boolean endian) override;
243  ::OpenRTM::PortStatus put() override;
259  ::OpenRTM::PortStatus get() override;
260 
261  virtual ::OpenRTM::PortSharedMemory_ptr getObjRef();
262 
263  protected:
264  ::OpenRTM::PortSharedMemory_var m_smInterface{OpenRTM::PortSharedMemory::_nil()};
265  bool m_endian{true};
266  coil::SharedMemory m_shmem;
267 
268  }; // class SharedMemoryPort
269 } // namespace RTC
270 
271 #endif // RTC_RTOBJECT
CORBA CDR Stream Buffer class
-*- C++ -*-
シリアライズ後のバイト列を操作するクラス
Definition: ByteData.h:30
SharedMemory クラス
Definition: SharedMemoryPort.h:57
~SharedMemoryPort() override
デストラクタ
virtual void write(ByteData &data)
データを書き込む 先頭8byteにデータサイズを書き込み、その後ろにデータを書き込む 設定したデータサイズが共有メモリのサイズを上回った場合、共有メモリの初期化を行う
bool m_endian
Definition: SharedMemoryPort.h:265
::OpenRTM::PortStatus put() override
データの送信を知らせる
virtual ::OpenRTM::PortSharedMemory_ptr getObjRef()
void create_memory(::CORBA::ULongLong memory_size, const char *shm_address) override
共有メモリの初期化 windowsではページングファイル上に領域を確保する Linuxでは/dev/shm以下にファイルを作成する 作成したファイルの内容を仮想アドレスにマッピングする
virtual int string_to_MemorySize(std::string size_str)
文字列で指定したデータサイズを数値に変換する 1M → 1048576 1k → 1024 100 → 100
void setEndian(::CORBA::Boolean endian) override
エンディアンを設定する
void setInterface(::OpenRTM::PortSharedMemory_ptr sm) override
通信先のCORBAインターフェースを登録する 登録する事により共有メモリの初期化したときに、通信先でもマッピングをやり直すことができる
void open_memory(::CORBA::ULongLong memory_size, const char *shm_address) override
共有メモリのマッピングを行う
::OpenRTM::PortStatus get() override
データの送信を要求する
::OpenRTM::PortSharedMemory_var m_smInterface
Definition: SharedMemoryPort.h:264
void close_memory(::CORBA::Boolean unlink=false) override
マッピングした共有メモリをアンマップする
coil::SharedMemory m_shmem
Definition: SharedMemoryPort.h:266
SharedMemoryPort()
コンストラクタ
virtual void read(ByteData &data)
データを読み込む
RTコンポーネント