# shm_queue **Repository Path**: zentel/shm_queue ## Basic Information - **Project Name**: shm_queue - **Description**: linux下的共享内存消息队列 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-06 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: 进程间通讯 ## README # shm_queue #### 介绍 linux下的共享内存消息队列,采用C语言实现,代码400行左右,无锁支持一写多读。 #### 接口如下 ``` SHM_API int shm_queue_open(shm_queue_t* queue, const shm_queue_options_t* opt); SHM_API int shm_queue_close(shm_queue_t* queue); SHM_API int shm_queue_write(shm_queue_t* queue, void* data, uint32_t size); SHM_API int shm_queue_read(shm_queue_t* queue, void* data, uint32_t* size); SHM_API int shm_queue_ncread(shm_queue_t* queue, void** data, uint32_t* size); //支持直接获取共享内存地址 SHM_API int shm_queue_ncwrite_begin(shm_queue_t* queue, void** buf, uint32_t* buf_size); SHM_API int shm_queue_ncwrite_finish(shm_queue_t* queue, uint32_t size); ``` 写数据 ``` shm_queue_t wqueue; shm_queue_options_t options; options.elem_count = 128; options.elem_size = 1024; options.mode = SHM_QUEUE_MODE_WRITE; options.name = "test"; int rslt = shm_queue_open(&wqueue, &options); printf("shm_queue_open ret:%d\n", rslt); while (1) { static const char str[] = "hello world!"; int rslt = shm_queue_write(&wqueue, (void*)str, sizeof(str)); if (rslt != 0) { printf("shm_queue_write error ret:%d\n", rslt); } usleep(100000); } printf("finish\n"); shm_queue_close(&wqueue); ``` 读数据 ``` shm_queue_t rqueue; shm_queue_options_t options; options.elem_count = 128; options.elem_size = 1024; options.mode = SHM_QUEUE_MODE_READ; options.name = "test"; int rslt = shm_queue_open(&rqueue, &options); printf("shm_queue_open ret:%d\n", rslt); char buffer[1024]; while (1) { uint32_t len = sizeof(buffer); rslt = shm_queue_read(&rqueue, buffer, &len); if (rslt == 0) { printf("shm_queue_read msgid:%d size:%d \n", rqueue.rmsgid, len); } else { //printf("shm_queue_read ret:%d\n", rslt); usleep(100000); } } printf("finish\n"); shm_queue_close(&rqueue); ``` #### 使用说明 1. ./premake gmake 2. make -C build 3. ./bin/test #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request