1#ifndef NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
2#define NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
13NEFORCE_BEGIN_NAMESPACE__
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) {}
29 explicit share_memory_exception(
const exception& e) :
30 system_exception(e) {}
32 ~share_memory_exception()
override =
default;
33 static constexpr auto static_type =
"shared_memory_exception";
77 size_t mapped_size_{0};
78 void* mapped_addr_{
nullptr};
79 access_mode access_mode_{access_mode::read_write};
140 NEFORCE_NODISCARD
void*
map(
size_t offset = 0,
size_t length = 0);
151 NEFORCE_NODISCARD
void*
data() const noexcept {
return mapped_addr_; }
158 template <
typename T>
159 NEFORCE_NODISCARD T*
data() const noexcept {
160 return static_cast<T*
>(mapped_addr_);
167 NEFORCE_NODISCARD
size_t size() const noexcept {
return size_; }
173 NEFORCE_NODISCARD
size_t mapped_size() const noexcept {
return mapped_size_; }
179 NEFORCE_NODISCARD
const string&
name() const noexcept {
return name_; }
185 NEFORCE_NODISCARD
bool is_open() const noexcept {
return is_open_; }
191 NEFORCE_NODISCARD
bool is_mapped() const noexcept {
return mapped_addr_ !=
nullptr; }
217NEFORCE_END_NAMESPACE__
static NEFORCE_NODISCARD bool exists(const string &name)
静态方法:检查共享内存是否存在
NEFORCE_NODISCARD void * map(size_t offset=0, size_t length=0)
映射共享内存到进程地址空间
void unmap() noexcept
取消映射
static bool remove(const string &name)
静态方法:删除共享内存对象
bool flush(bool async=false)
刷新共享内存到磁盘
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
获取异常类型