NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
share_memory.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
2#define NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
19
24struct share_memory_exception final : system_exception {
25 explicit share_memory_exception(const char* info = "Shared Memory Operation Failed.",
26 const char* type = static_type, const int code = 0) noexcept :
27 system_exception(info, type, code) {}
28
29 explicit share_memory_exception(const exception& e) :
30 system_exception(e) {}
31
32 ~share_memory_exception() override = default;
33 static constexpr auto static_type = "shared_memory_exception";
34};
35 // Exceptions
37
43
50class NEFORCE_API share_memory {
51public:
56 enum class access_mode {
57 read_only = 0x01,
58 read_write = 0x02,
59 };
60
65 enum class open_mode {
66 create_only,
67 open_only,
68 open_or_create
69 };
70
72
73private:
74 native_handle_type handle_;
75 string name_;
76 size_t size_{0};
77 size_t internal_mapped_size_{0};
78 size_t mapped_size_{0};
79 void* original_mapped_addr_{nullptr};
80 void* mapped_addr_{nullptr};
81 access_mode access_mode_{access_mode::read_write};
82 bool is_open_{false};
83
84public:
88 share_memory() noexcept;
89
98 explicit share_memory(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
99 access_mode access = access_mode::read_write);
100
101 share_memory(const share_memory&) = delete;
102 share_memory& operator=(const share_memory&) = delete;
103
107 share_memory(share_memory&& other) noexcept;
108
112 share_memory& operator=(share_memory&& other) noexcept;
113
118
127 void open(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
128 access_mode access = access_mode::read_write);
129
133 void close() noexcept;
134
142 void* map(size_t offset = 0, size_t length = 0);
143
147 void unmap() noexcept;
148
153 NEFORCE_NODISCARD void* data() const noexcept { return mapped_addr_; }
154
160 template <typename T>
161 NEFORCE_NODISCARD T* data() const noexcept {
162 return static_cast<T*>(mapped_addr_);
163 }
164
169 NEFORCE_NODISCARD size_t size() const noexcept { return size_; }
170
175 NEFORCE_NODISCARD size_t mapped_size() const noexcept { return mapped_size_; }
176
181 NEFORCE_NODISCARD const string& name() const noexcept { return name_; }
182
187 NEFORCE_NODISCARD bool is_open() const noexcept { return is_open_; }
188
193 NEFORCE_NODISCARD bool is_mapped() const noexcept { return mapped_addr_ != nullptr; }
194
200 bool flush(bool async = false);
201
209 static bool remove(const string& name);
210
216 NEFORCE_NODISCARD static bool exists(const string& name);
217};
218 // ShareMemory
220
221NEFORCE_END_NAMESPACE__
222
223#endif // NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
bool is_open() const noexcept
检查是否已打开
void unmap() noexcept
取消映射
static bool exists(const string &name)
检查共享内存是否存在
open_mode
打开模式枚举
size_t size() const noexcept
获取共享内存大小
static bool remove(const string &name)
删除共享内存对象
bool flush(bool async=false)
刷新共享内存到磁盘
access_mode
访问模式枚举
const string & name() const noexcept
获取共享内存名称
void * map(size_t offset=0, size_t length=0)
映射共享内存到进程地址空间
size_t mapped_size() const noexcept
获取映射大小
share_memory() noexcept
默认构造函数
void open(const string &name, size_t size, open_mode mode=open_mode::open_or_create, access_mode access=access_mode::read_write)
打开或创建共享内存
T * data() const noexcept
获取映射地址(类型转换版本)
void * data() const noexcept
获取映射地址
bool is_mapped() const noexcept
检查是否已映射
void close() noexcept
关闭共享内存
future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
void * native_handle_type
系统句柄类型
字符串类型别名和实用函数
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
const char * type() const noexcept
获取异常类型
int code() const noexcept
获取异常码