# cqueue **Repository Path**: redocCheng/cqueue ## Basic Information - **Project Name**: cqueue - **Description**: 一个环形队列缓冲区 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-20 - **Last Updated**: 2025-12-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # cqueue 一个轻量级的 C 语言环形队列(字节队列)实现,使用用户提供的静态缓冲区,不依赖动态内存分配。 ## 特性 - 基于环形缓冲区,头尾索引管理。 - 支持单字节与批量入队/出队。 - 支持窥视(peek)与仅出队(pop)操作。 - 接口简洁,易于嵌入式场景使用。 ## 目录结构 - `cqueue/`:队列实现(`cqueue.c`、`cqueue.h`) - `example/`:使用示例(`demo.c`) ## 快速开始 ```c #include "cqueue.h" #define BUF_SIZE 32 static uint8_t buf[BUF_SIZE]; static queue_t q; void init_queue(void) { queue_init_static(&q, buf, BUF_SIZE); } void push_byte(uint8_t b) { if(!queue_put(&q, b)) { /* 队列已满 */ } } uint8_t pop_byte(uint8_t *out) { return queue_get(&q, out); } ``` 批量操作示例: ```c uint8_t data[8] = {1,2,3,4,5,6,7,8}; queue_put_length(&q, data, 8); uint8_t peek_buf[8]; if(queue_peek_length(&q, peek_buf, 8)) { queue_pop_length(&q, 8); } ``` ## API 说明 - `queue_init_static`:初始化队列(绑定外部缓冲区)。 - `queue_get_count`:获取当前队列字节数。 - `queue_get_size`:获取缓冲区大小(传入的 `max_size`)。 - `queue_is_full` / `queue_is_empty`:满/空判断。 - `queue_put` / `queue_put_length`:入队(单字节/批量)。 - `queue_get`:出队并读取一个字节。 - `queue_peek` / `queue_peek_length` / `queue_peek_all`:窥视数据,不出队。 - `queue_pop` / `queue_pop_length` / `queue_pop_all`:仅出队,不读取数据。 ## 注意事项 - 该实现通过“留一个空位”来区分空/满状态,实际可用容量为 `max_size - 1`。若需要可用容量为 N,请分配 N+1 大小的缓冲区。 - 接口返回值使用 `uint8_t` 表示成功/失败(通常为 `true`/`false`)。 - 未做并发保护;若在多线程或中断环境使用,请自行加锁或关中断。 ## 许可证 MIT,详见 `LICENSE`。