Application使用内核链表
创始人
2025-05-31 14:18:32
0

在kernel模块里面创建链表_内核模块中简单的插入链表_蓝牙先生的博客-CSDN博客使用QEMU搭建ARM64实验环境_蓝牙先生的博客-CSDN博客#1.toolchainwget -c https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xztar xfv gcc-arm-8.2-2018.11-x86_64-arm-eabi.tar.xzexport PAThttps://blog.csdn.net/m0_37132481/article/details/123547874?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167930402216800213099511%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167930402216800213099511&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-123547874-null-null.blog_rank_default&utm_term=%E9%93%BE&spm=1018.2226.3001.4450环境

$ 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

$ cat list.h
#if ! defined(__LIST__)
#define __LIST__
#include struct list_head {struct list_head *next, *prev;
};
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \struct list_head name = LIST_HEAD_INIT(name)#ifndef container_of
#define container_of(ptr, type, member) \(type *)((char *)(ptr) - (char *) &((type *)0)->member)
#endif
#define __container_of(ptr, sample, member)                             \(void *)container_of((ptr), typeof(*(sample)), member)#define list_entry(ptr, type, member) \container_of(ptr, type, member)/****************************init******************************/
static inline void
__list_add(struct list_head *entry,struct list_head *prev, struct list_head *next)
{next->prev = entry;entry->next = next;entry->prev = prev;prev->next = entry;
}
/****************************add******************************/
static inline void
list_add(struct list_head *entry, struct list_head *head)
{__list_add(entry, head, head->next);
}
static inline void
list_add_tail(struct list_head *entry, struct list_head *head)
{__list_add(entry, head->prev, head);
}
/****************************delete******************************/
static inline void
__list_del(struct list_head *prev, struct list_head *next)
{next->prev = prev;prev->next = next;
}
static inline void
list_del(struct list_head *entry)
{__list_del(entry->prev, entry->next);
}
/****************************empty******************************/
static inline bool
list_empty(struct list_head *head)
{return head->next == head;
}
/****************************tranverse******************************/
#define list_for_each_entry_safe(pos, tmp, head, member)                \for (pos = __container_of((head)->next, pos, member),               \tmp = __container_of(pos->member.next, pos, member);           \&pos->member != (head);                                        \pos = tmp, tmp = __container_of(pos->member.next, tmp, member))#define list_for_each_entry(pos, head, member)                          \for (pos = __container_of((head)->next, pos, member);               \&pos->member != (head);                                        \pos = __container_of(pos->member.next, pos, member))
#endif

 main.c

$ cat main.c
/*file name:main.cdate     : Mon Mar 20 04:34:40 AM EDT 2023
*/
#include 
#include 
#include 
#include 
#include 
#include 
#include #include "list.h"struct demo_data_t {int data;struct list_head node;
};
int main(int argc, char *argv[])
{LIST_HEAD(list_handle);for(int loop = 0; ; loop++) {/*****************************add**********************************************/for(int i = 0; i < 10; i++) {struct demo_data_t *entry = calloc(1, sizeof(struct demo_data_t) * 1024 * 1024);entry->data = i;list_add_tail(&entry->node, &list_handle);}/*****************************tranverse**********************************************/struct demo_data_t *pos = NULL, *tmp = NULL;list_for_each_entry_safe(pos, tmp, &list_handle, node) {printf("%d ", pos->data);list_del(&pos->node);free(pos);}printf("\n");}return 0;
}

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

<完>

相关内容

热门资讯

短吁长叹的近义词 短吁长叹的近义词有:短叹长吁,短吁长叹[duǎn xū cháng tàn]的意思:吁:叹气。长声、...
波路壮阔的近义词 波路壮阔的近义词有:波澜壮阔,波路壮阔[bō lù zhuàng kuò]的意思:波路:波涛。比喻规...
闭口结舌的近义词 闭口结舌的近义词有:闭口藏舌,闭口结舌[bì kǒu jié shé]的意思:闭着嘴不说话。犹言闭口...
好汉做事好汉当的近义词 好汉做事好汉当的近义词有:一人做事一人当,敢做敢当,好汉做事好汉当[hǎo hàn zuò shì ...
能柔能刚的近义词 能柔能刚的近义词有:能刚能柔,能柔能刚[néng róu néng gāng]的意思:柔:温和;刚:...
执鞭随镫的近义词 执鞭随镫的近义词有:执鞭坠镫,执鞭随蹬,执鞭随镫[zhí biān suí dèng]的意思:比喻因...
信口开河的近义词 信口开河的近义词有:一簧两舌,信口开合,信口开呵,信口胡言,信口胡诌,信口雌黄,口不择言,天南地北,...
书香世家的近义词 书香世家的近义词有:书香人家,书香门户,诗礼人家,书香世家[shū xiāng shì jiā]的意...
如痴似醉的近义词 如痴似醉的近义词有:如痴如醉,如醉如痴,如痴似醉[rú chī sì zuì]的意思:亦作“如醉如痴...
附会穿凿的近义词 附会穿凿的近义词有:牵强附会,附会穿凿[fù huì chuān záo]的意思:将无关之事硬扯在一...
不足挂齿,不足挂齿的意思,不... 不足挂齿bù zú guà chǐ [释义]不足:不值得;挂齿:说起;提到;挂在口上。不值得在...
群芳竞艳的近义词 群芳竞艳的近义词有:群芳争艳,群芳竞艳[qún fāng jìng yàn]的意思:竞:争逐。各种花...
东西易面的近义词 东西易面的近义词有:是非颠倒,东西易面[dōng xi yì miàn]的意思:指东西方向颠倒。后比...
熊经鸟引的近义词 熊经鸟引的近义词有:熊经鸟曳,熊经鸟申,熊经鸟引[xióng jīng niǎo yǐn]的意思:同...
泥菩萨过江,自身难保的近义词 泥菩萨过江,自身难保的近义词有:泥菩萨落水,自身难保,泥菩萨过江,自身难保[ní pú sà guò...
励精求治的近义词 励精求治的近义词有:励精图治,厉精求治,励精求治[lì jīng qiú zhì]的意思:振奋精神,...
不易之典的近义词 不易之典的近义词有:不易之论,不易之典[bù yì zhī diǎn]的意思:不变的法则。出自:南朝...
厌难折冲的近义词 厌难折冲的近义词有:折冲厌难,厌难折冲[yàn nán zhé chōng]的意思:指能克服困难,抗...
四面八方的近义词 四面八方的近义词有:五湖四海,四方八面,大街小巷,山南海北,四面八方[sì miàn bā fāng...
醉翁之意的近义词 醉翁之意的近义词有:别有用心,醉翁之意,醉翁之意不在酒,醉翁之意[zuì wēng zhī yì]的...