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 mapped_size_{0};
78 void* mapped_addr_{nullptr};
79 access_mode access_mode_{access_mode::read_write};
80 bool is_open_{false};
81
82public:
86 share_memory() noexcept;
87
96 explicit share_memory(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
97 access_mode access = access_mode::read_write);
98
99 share_memory(const share_memory&) = delete;
100 share_memory& operator=(const share_memory&) = delete;
101
105 share_memory(share_memory&& other) noexcept;
106
110 share_memory& operator=(share_memory&& other) noexcept;
111
116
125 void open(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
126 access_mode access = access_mode::read_write);
127
131 void close() noexcept;
132
140 NEFORCE_NODISCARD void* map(size_t offset = 0, size_t length = 0);
141
145 void unmap() noexcept;
146
151 NEFORCE_NODISCARD void* data() const noexcept { return mapped_addr_; }
152
158 template <typename T>
159 NEFORCE_NODISCARD T* data() const noexcept {
160 return static_cast<T*>(mapped_addr_);
161 }
162
167 NEFORCE_NODISCARD size_t size() const noexcept { return size_; }
168
173 NEFORCE_NODISCARD size_t mapped_size() const noexcept { return mapped_size_; }
174
179 NEFORCE_NODISCARD const string& name() const noexcept { return name_; }
180
185 NEFORCE_NODISCARD bool is_open() const noexcept { return is_open_; }
186
191 NEFORCE_NODISCARD bool is_mapped() const noexcept { return mapped_addr_ != nullptr; }
192
198 bool flush(bool async = false);
199
205 static bool remove(const string& name);
206
212 NEFORCE_NODISCARD static bool exists(const string& name);
213};
214 // ShareMemory
216
217NEFORCE_END_NAMESPACE__
218
219#endif // NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
static NEFORCE_NODISCARD bool exists(const string &name)
静态方法:检查共享内存是否存在
NEFORCE_NODISCARD void * map(size_t offset=0, size_t length=0)
映射共享内存到进程地址空间
void unmap() noexcept
取消映射
open_mode
打开模式枚举
static bool remove(const string &name)
静态方法:删除共享内存对象
bool flush(bool async=false)
刷新共享内存到磁盘
access_mode
访问模式枚举
NEFORCE_NODISCARD T * data() const noexcept
获取映射地址(类型转换版本)
NEFORCE_NODISCARD size_t size() const noexcept
获取共享内存大小
NEFORCE_NODISCARD const string & name() const noexcept
获取共享内存名称
NEFORCE_NODISCARD 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)
打开或创建共享内存
NEFORCE_NODISCARD bool is_mapped() const noexcept
检查是否已映射
NEFORCE_NODISCARD bool is_open() const noexcept
检查是否已打开
NEFORCE_NODISCARD void * data() const noexcept
获取映射地址
void close() noexcept
关闭共享内存
NEFORCE_NODISCARD future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
int native_handle_type
系统句柄类型
字符串类型别名和实用函数
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型