-
Notifications
You must be signed in to change notification settings - Fork 0
meeting_2010_04_16
Yue Du edited this page Oct 16, 2015
·
1 revision
Hi,
slides 内容贴在 wiki 上了 [0]
,pdf 文件传到 groups 里了 [1]
.
关于 list_for_each 没有访问链表头的问题,确实是这样的,第一个成员没有存
储内容。有的链表好像是用 LIST_HEAD 来声明链表头的,这样就不会浪费空间
了。[2]
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
扩展阅读:
[2]
(里边还也讲了 list_entry, container_of),
[3]
关于 size_t
[0]
. http://beihang-osc.org/index.php?title=2010_%E5%B9%B4_4_%E6%9C% 88\_16_%E5%8F%B7%E6%B4%BB%E5%8A%A8
[已经无效]
_
[1]
.
https://beihang-open-source-club.googlegroups.com/web/2010-04-16--lis...
复制到了这里
[2]
http://kernelnewbies.org/FAQ/LinkedLists
链表的表头确实是跟节点不一样的,上边 2 有这样一个例子:
struct mystruct first;
struct mystruct second;
/* 可以看到节点 first/second 都是用于记录数据的 struct mystruct */
/* 而表头,mylinkedlist, 只是一个简单的 struct list_head, 不记录数据 */
LIST_HEAD(mylinkedlist) ;
list_add ( &first.mylist , &mylinkedlist ) ;
list_add ( &second.mylist , &mylinkedlist ) ;
----------------
在 DRM 驱动里边有这样一个例子,
struct drm_device {
struct list_head filelist;
}
struct drm_file {
struct list_head lhead;
}
static int drm_open_helper(struct drm_device * dev)
{
struct drm_file *priv;
list_add(&priv->lhead, &dev->filelist);
}
struct drm_device 是链表表头,记录关于设备的整体的信息。而这个链表里包含 的普通节点是另外一个类型,struct drm_file。
所以,for_each 中忽略了链表头,是合乎情理的。