HumanRender/human_render/Ipc/libipc/shm.h
2024-12-22 23:24:02 +08:00

59 lines
1.2 KiB
C++

#pragma once
#include <cstddef>
#include <cstdint>
namespace ipc {
namespace shm {
using id_t = void*;
enum : unsigned {
create = 0x01,
open = 0x02
};
extern id_t acquire(char const * name, std::size_t size, unsigned mode = create | open);
extern void * get_mem(id_t id, std::size_t * size);
extern std::int32_t release(id_t id);
extern void remove (id_t id);
extern void remove (char const * name);
extern std::int32_t get_ref(id_t id);
extern void sub_ref(id_t id);
class handle {
public:
handle();
handle(char const * name, std::size_t size, unsigned mode = create | open);
handle(handle&& rhs);
~handle();
void swap(handle& rhs);
handle& operator=(handle rhs);
bool valid() const noexcept;
std::size_t size () const noexcept;
char const * name () const noexcept;
std::int32_t ref() const noexcept;
void sub_ref() noexcept;
bool acquire(char const * name, std::size_t size, unsigned mode = create | open);
std::int32_t release();
void* get() const;
void attach(id_t);
id_t detach();
private:
class handle_;
handle_* p_;
};
} // namespace shm
} // namespace ipc