/
memset
/
shared_mem
Обзор
Документация
Войти
/
memset
/
shared_mem
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
sharedmem.h
114 строк
4 KB
petrova_ms
Добавлены файлы в репозиторий
06 июн 2026, 13:37
06 июн 2026, 13:37
0993acb
Код
Авторство
О чём код?
/*! @defgroup SharedMem @brief */ ///@{ /// /** @file Заголовочный файл sharedmem.h @author Петрова М.С. (meset) @version 1.0. @date @note В файле объявлен класс SharedMem */ #ifndef SHAREDMEM_H #define SHAREDMEM_H #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <errno.h> #include <cstdint> //#define DEBUG_PRINTF_SHARED_MEM /** * @enum TypeStatusSharedMem - типы статусов разделяемой памяти */ enum TypeStatusSharedMem{ TYPE_STATUS_SHARED_MEM_ERR_OPEN = -2, ///< Ошибка открытия сегмента TYPE_STATUS_SHARED_MEM_ERR_CREATE = -1, ///< Ошибка создания сегмента TYPE_STATUS_SHARED_MEM_CREATE = 1, ///< Сегмент создан TYPE_STATUS_SHARED_MEM_OPEN = 2 ///< Ошибка открыт }; /** * @class SharedMem * @brief Отвечает за создание/открытие разделяемой памяти по ключу */ class SharedMem { private: key_t memory_key; ///< Ключ для доступа к разделяемой памяти uint8_t * data = nullptr; ///< Указатель на адресное пространство uint64_t memory_size; ///< Размер разделяемой памяти TypeStatusSharedMem type_status_mem = TYPE_STATUS_SHARED_MEM_ERR_OPEN; ///< Статус объекта разделяемой памяти int shmid = -1; ///< Дескриптор адресного пространства разделяемой памяти public: /** * @brief SharedMem - конструктор */ SharedMem() {}; /** * @brief ~SharedMem - деструктор */ ~SharedMem(); /** * @brief Инициализация разделяемой памяти * @param[in] memory_key - ключ разделяемой памяти * @param[in] memory_size - размер разделяемой памяти в байтах * @return Значение из enum TypeStatusSharedMem */ int init_shared_mem(const key_t memory_key, const uint64_t memory_size); /** * @brief Обнулить адресное пространство */ void memset_zero(); /** * @brief Обнулить часть адресного пространства * @param[in] size_byte - кол-во байт, которые надо обнулить * @param[in] offset_byte - смещение от начала сегмента * @return 0 - ок, -1 - ошибка */ int memset_size_zero(uint64_t size_byte, uint64_t offset_byte); /** * @brief Вычитать данные из адресного пространства * @param[out] buff_read - указатель на буффер для вычитования данных * @param[in] size_byte - размер вычитываемых данных * @param[in] offset_byte - смещение от начала адресного простравнства * @return 0 - ок, -1 - ошибка */ int read_from_mem(uint8_t * buff_read, uint64_t size_byte, uint64_t offset_byte); /** * @brief Записать данные в адресное пространство * @param[in] buff_write - указатель на буффер с данными * @param[in] size_byte - размер записываемых данных * @param[in] offset_byte - смещение от начала адресного простравнства * @return 0 - ок, -1 - ошибка */ int write_to_mem(const uint8_t * buff_write, uint64_t size_byte, uint64_t offset_byte); /** * @brief Взять тип статуса разделяемой памяти * @return Значение из enum TypeStatusSharedMem */ uint8_t get_type_mem() { return type_status_mem; } }; #endif // SHAREDMEM_H ///@}