Application使用内核链表之队列
创始人
2025-05-31 13:23:40
0

环境

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
 

list.h在这里可以找到

Application使用内核链表_蓝牙先生的博客-CSDN博客经常遇到需要使用链表、丢列、栈数据结构问题,备份一下,免得每次都去查找;在kernel模块里面创建链表_内核模块中简单的插入链表_蓝牙先生的博客-CSDN博客。https://blog.csdn.net/m0_37132481/article/details/129672070?spm=1001.2014.3001.5501

 list_queue.h

$ cat list_queue.h
#if ! defined(__LIST_QUEUE_H__)
#define __LIST_QUEUE_H__
#include 
#include 
#include void *list_queue_alloc(void);
void list_queue_destroy(void *handle);
uint32_t list_queue_get_size(void *handle);
bool list_queue_in(void *handle, void *data);
bool list_queue_out(void *handle, void **data);#endif

 list_queue.c

$ cat list_queue.c #include "list_queue.h"#include "list.h"struct queue_data_t {void *data;struct list_head node;};struct list_queue_mgr_t {uint32_t queue_size;struct queue_data_t queue_head;};void *list_queue_alloc(void) {struct list_queue_mgr_t *handle = (struct list_queue_mgr_t *)calloc(1, sizeof(struct list_queue_mgr_t));if(!handle) {/* null */} else {handle->queue_size = 0;INIT_LIST_HEAD(&handle->queue_head.node);}return handle;}void list_queue_destroy(void *handle) {struct list_queue_mgr_t *mgr = (struct list_queue_mgr_t *)handle;if(!mgr) {/* null */} else {if(list_empty(&mgr->queue_head.node)) {/* null */} else {struct queue_data_t *pos = NULL, *tmp = NULL;list_for_each_entry_safe(pos, tmp, &mgr->queue_head.node, node) {list_del(&pos->node);free(pos->data);free(pos);mgr->queue_size--;}}free(mgr);}}uint32_t list_queue_get_size(void *handle) {struct list_queue_mgr_t *mgr = (struct list_queue_mgr_t *)handle;if(!handle) {/* null */} else {return mgr->queue_size;}}bool list_queue_in(void *handle, void *data) {struct list_queue_mgr_t *mgr = (struct list_queue_mgr_t *)handle;if(!data || !handle) {/* null */} else {struct queue_data_t *new = (struct queue_data_t*)calloc(1, sizeof(struct queue_data_t));if(!new) {/* null */} else {new->data = data;list_add_tail(&new->node, &mgr->queue_head.node);mgr->queue_size++;}}}bool list_queue_out(void *handle, void **data) {struct list_queue_mgr_t *mgr = (struct list_queue_mgr_t *)handle;if(!data || !handle) {/* null */} else if(list_empty(&mgr->queue_head.node)){/* null */} else {struct list_head *node = mgr->queue_head.node.next;list_del(node);struct queue_data_t *d = list_entry(node, struct queue_data_t, node);*data = d->data;free(d);mgr->queue_size--;}}

main.c

$ cat main.c
/*file name:main.cdate     : Mon Mar 20 06:20:04 AM EDT 2023
*/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "list_queue.h"int main(int argc, char *argv[])
{void *handle = list_queue_alloc();for(int loop = 0; ; loop++) {for(int i = 0; i < 10; i++) {int *data = calloc(1, sizeof(int));*data = i;list_queue_in(handle, (void *)data);}while(list_queue_get_size(handle)) {int *data;list_queue_out(handle, (void **)&data);printf("%d ", *data);}printf("\n");}list_queue_destroy(handle);return 0;
}

 经常遇到需要使用链表、丢列、栈数据结构问题,备份一下,免得每次都去查找;方便下次快速使用;

<完>

相关内容

热门资讯

清静的反义词   一、【反义词】  喧嚣、嘈杂、吵杂、烦扰、烦嚣  二、【基本解释】  [释义](形)(环境)安静...
毫无疑义的近义词及意思 毫无疑义的近义词及意思毫无疑义近义词: 不容置疑( 注释:不允许有什么怀疑。表示论证严密,无可怀疑。...
贯通的近义词是什么   新知识会以新颖、或许奇妙的方式与旧知识融会贯通。下面是小编收集整理的贯通的近义词,希望对您有所帮...
乔太守乱点鸳鸯谱的近义词 乔太守乱点鸳鸯谱的近义词有:乱点鸳鸯谱,乔太守乱点鸳鸯谱[qiáo tài shǒu luàn di...
移动应用架构设计:如何转变开发... 移动应用架构设计:如何转变开发流程 2023 年掌握移动应用程序架构的指南࿰...
计算机组成原理实验1---运算...     本实验为哈尔滨工业大学计算机组成原理实验,实验内容均为个人完成,...
八面威风的近义词及意思 八面威风的近义词及意思八面威风近义词: 八面威风( 注释:威风:令人敬畏的'气势。各个方面都很威风。...
英雄无用武之地的近义词 英雄无用武之地的近义词有:怀才不遇,英雄无用武之地[yīng xióng wú yòng wǔ zh...
弃文就武的近义词 弃文就武的近义词有:弃文竞武,弃笔从戎,投笔从戎,弃文就武[qì wén jiù wǔ]的意思:放弃...
徒拥其名的近义词 徒拥其名的近义词有:徒拥虚名,徒有虚名,徒拥其名[tú yōng qí míng]的意思:徒:只。空...
Blender教程利用Cell...   推荐:将 NSDT场景编辑器 加入你的3D开发工具链 效果图 一、Cell F...
项目经理的这些致命错误,你有吗... 由于公司因业务发展,需要提拔一批项目经理。 王波就是其中之一,是一名技...
神思恍惚的近义词 神思恍惚的近义词有:神情恍惚,神魂颠倒,若有所思,神思恍惚[shén sī huǎng hū]的意思...
超以象外的近义词 超以象外的近义词有:超然象外,超以象外[chāo yǐ xiàng wài]的意思:以:用法等同“于...
Python进阶之多态和属性访... 面向对象三大特征 封装:将数据和方法放在一个类中,构成封装。继承...
父母国的近义词 父母国的近义词有:父母之国,父母之邦,父母国[fù mǔ guó]的意思:指祖国出自:战国·邹·孟轲...
徘徊的近义词 徘徊的近义词  徘徊  【拼音】:pái huáiimage  【释义】:往返回旋;来回走动。比喻事...
【免费分享】全球海洋测深DEM... (本文首发于“水经注GIS”公号,订阅“水经注GIS”公号,...
Airwallex 基于 Fl... 摘要:本文整理自 Airwallex Risk ML Platform Team 董大...
回黄转绿的近义词 回黄转绿的近义词有:大地回春,回黄转绿[huí huáng zhuǎn lǜ]的意思:树叶由绿变黄,...