59 lines
1.2 KiB
C
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
|