
回复
通过struct list_head创建,INIT_LIST_HEAD初始化。(list_head以及INIT_LIST_HEAD位于***<u><linux/list.h></u>***)
静态分配通过LIST_HEAD宏完成:
要创建新节点,只需创建数据结构实例,并初始化嵌入其中的list_head。
举例:
关于kzalloc申请内存可参考Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别【转】 - sky-heaven - 博客园 (cnblogs.com)
内核提供的list_add用于向链表添加新项,它是内部函数__list_add的包装:
还有另一个函数可以将节点添加到链表:
list_del只是移除该节点,分配给该节点的内存需要使用kfree手动释放。
使用宏list_for_each_entry(pos, head, member)进行链表遍历。