1 #include "daq/slc/system/SharedMemory.h"
12 bool SharedMemory::unlink(
const std::string& path)
14 return (::shm_unlink(path.c_str()) == -1);
17 SharedMemory::SharedMemory()
18 : m_fd(-1), m_path(), m_size(0), m_addr(NULL) {}
20 SharedMemory::SharedMemory(
const std::string& path,
size_t size)
21 : m_fd(-1), m_path(path), m_size(size), m_addr(NULL)
26 : m_fd(file.m_fd), m_path(file.m_path),
27 m_size(file.m_size), m_addr(file.m_addr) {}
29 SharedMemory::~SharedMemory() {}
31 bool SharedMemory::open(
const std::string& path,
size_t size)
34 int fd = ::shm_open(path.c_str(), O_CREAT | O_EXCL | O_RDWR, 0666);
36 if (errno != EEXIST) {
40 fd = ::shm_open(path.c_str(), O_CREAT | O_RDWR, 0666);
52 bool SharedMemory::open()
54 return open(m_path, m_size);
57 void SharedMemory::close()
60 if (m_addr != NULL) munmap(m_addr, m_size);
66 bool SharedMemory::truncate(
size_t size)
69 ::ftruncate(m_fd, size);
81 void* SharedMemory::map(
size_t offset,
size_t size)
84 void* addr = ::mmap(NULL, size, PROT_READ | PROT_WRITE,
85 MAP_SHARED, m_fd, offset);
86 if (addr == MAP_FAILED) {
95 void* SharedMemory::map()
97 if (m_addr == NULL) m_addr = map(0, m_size);
101 bool SharedMemory::unlink()
104 return (unlink(m_path));
107 bool SharedMemory::seekTo(
size_t offset)
109 return (lseek(m_fd, offset, SEEK_SET) == -1);
112 bool SharedMemory::seekBy(
size_t offset)
114 return (lseek(m_fd, offset, SEEK_CUR) == -1);
117 bool SharedMemory::isOpened()
125 m_path = file.m_path;
126 m_size = file.m_size;
127 m_addr = file.m_addr;