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 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};
142 void*
map(
size_t offset = 0,
size_t length = 0);
153 NEFORCE_NODISCARD
void*
data() const noexcept {
return mapped_addr_; }
160 template <
typename T>
161 NEFORCE_NODISCARD T*
data() const noexcept {
162 return static_cast<T*
>(mapped_addr_);
169 NEFORCE_NODISCARD
size_t size() const noexcept {
return size_; }
175 NEFORCE_NODISCARD
size_t mapped_size() const noexcept {
return mapped_size_; }
181 NEFORCE_NODISCARD
const string&
name() const noexcept {
return name_; }
187 NEFORCE_NODISCARD
bool is_open() const noexcept {
return is_open_; }
193 NEFORCE_NODISCARD
bool is_mapped() const noexcept {
return mapped_addr_ !=
nullptr; }
221NEFORCE_END_NAMESPACE__
bool is_open() const noexcept
检查是否已打开
void unmap() noexcept
取消映射
static bool exists(const string &name)
检查共享内存是否存在
size_t size() const noexcept
获取共享内存大小
static bool remove(const string &name)
删除共享内存对象
bool flush(bool async=false)
刷新共享内存到磁盘
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
获取异常码