linux 内核链表的应用
来源:互联网 发布:河南比尔软件科技 编辑:程序博客网 时间:2024/06/14 21:52
内核版本:kernel 3.0.1#include <stdio.h>#include <stdlib.h>#include <sys/queue.h>struct ElemType{ int num; char *ptr; LIST_ENTRY(ElemType) entries;};LIST_HEAD(List, ElemType);static struct List gListHead;// linux自带的LIST_END用不了,可能是要什么头文件,或者编译时候需要某个库支持,但是我暂时还没找到驾驭LIST_END的方法。// (若有哪位大虾知道还请告知)// 下面是我自己模仿linux的LIST_END函数头写的。struct ElemType* LIST_END(struct List *list){ struct ElemType *recv = NULL; struct ElemType *elem = NULL; LIST_FOREACH(elem, list, entries) { if (elem && elem->entries.le_next == NULL) { recv = elem; } } return recv;}// 尾部插入。linux没有提供(反正我没找到,若有哪位大虾知道还请告知)尾部插入的方法,只能自己实现了。//void LIST_INSERT_TAIL(struct List *list, struct ElemType *elem, LIST_ENTRY name) // LIST_ENTRY不能通过编译,why?void LIST_INSERT_TAIL(struct List *list, struct ElemType *elem){ struct ElemType *tail = LIST_END(list); if (tail) { LIST_INSERT_AFTER(tail, elem, entries); } else { LIST_INSERT_HEAD(list, elem, entries); }}int main(){ LIST_INIT(&gList); struct ElemType *elem1 = (struct ElemType *)malloc(sizeof(struct ElemType)); struct ElemType *elem2 = (struct ElemType *)malloc(sizeof(struct ElemType)); struct ElemType *elem3 = (struct ElemType *)malloc(sizeof(struct ElemType)); elem1->num = 11; elem2->num = 22; elem3->num = 33; // insert in the head LIST_INSERT_HEAD(&gList, elem1, entries); LIST_INSERT_HEAD(&gList, elem2, entries); LIST_INSERT_HEAD(&gList, elem3, entries); // insert in the tail //LIST_INSERT_TAIL(&gList, elem1); //LIST_INSERT_TAIL(&gList, elem2); //LIST_INSERT_TAIL(&gList, elem3); struct ElemType *elem; // 采用 for 循环遍历 for (elem = gList.lh_first; elem; elem = elem->entries.le_next) { printf("using for, num = %d\n", elem->num); if (elem->num == 22) { LIST_REMOVE(elem, entries); free(elem); //elem->num = 99; } } // 采用 LIST_FOREACH 遍历 LIST_FOREACH(elem, &gList, entries) { printf("using LIST_FOREACH, num = %d\n", elem->num); //if (elem->num == 33) { LIST_REMOVE(elem, entries); free(elem); } } LIST_FOREACH(elem, &gList, entries) { printf("using LIST_FOREACH, num = %d\n", elem->num); } return 0;}
0 0
- linux 内核链表的应用
- Linux内核中循环链表的简单应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- Linux内核链表的研究与应用
- 内核链表的应用
- Linux内核的链表
- Linux内核---60.linux内核链表list的使用
- Linux 2.6 内核的嵌入式系统应用
- Linux 2.6 内核的嵌入式系统应用
- linux 内核与应用层的接口
- Linux 2.6 内核的嵌入式系统应用
- servlet入门(1)
- NDK Application.mk使用手册
- OpenGL 渲染管线理论
- 给VMware Work Station上的虚拟机Windows 7 X64增加磁盘空间
- python异常处理
- linux 内核链表的应用
- java 获取上一周周一到周日的日期
- AJAX(二)jquery ajax
- Dojo -- Getting Started篇之dojoConfig
- UIAlertView 和 UIAlertController
- ajax jsp 无刷新上传文件
- ruby 入门实例
- PHP 命名空间 解惑
- XYLX 10.19 H1N1(h1n1)