本来很久前就应该写这篇博文的,但因为工作原因拖到现在。本文是继linux内核之链表操作解析 之后对linux内核中链表和哈希链表的操作宏以及操作函数的一个应用。这是工作中的一段代码(是linux内核网络代码),稍微修改了下。在文章也会穿插些内核编程需要注意的事项。
第一步:是定义数据类型,主要是哈希链表,因为用的是拉链法(也叫数组链表)处理碰撞,所以也可以当作是链表的一个应用。对哈希链表来说除了定义数据项节点外还要定义个哈希表。对数据项解释下,hNode是链表连接的,key是真正的数据。key是个比较复杂的结构体,姑且认为他里面有个整型成员,作为关键字,其他成员不管。注意点:数据项节点中的成员尽量都不要用指针(尤其时hNode成员一定不能用指针),因为:第一、在用container_of()宏获取到数据项节点指针时,数据项节点成员若是指针那获取将会失败,具体的可以查看linux内核之container_of应用。第二、如果定义了指针,