有一个 Linux 驱动模块,它会给每个设备分配一个数据结构
struct A {
...
struct list_head list;
...
}
这个数据结构内含一个 “带头节点的双向循环链表”,这个 struct list_head 是 Linux 内核中的一个标准结构
struct list_head {
struct list_head *prev;
struct list_head *next;
}
一开始的时候,链表为空,只有一个头节点,所以 prev 指向自己,next 也指向自己
当系统上有两个设备的时候,就会产生 2 个结构体 a1 和 a2,同时也会产生两条链表
现在,出于一些原因,我需要让 a1 和 a2 共享一条链表。把 struct A 中的 struct list_head list 改为 struct list_head *list 这个方案看起来很直接,但是一旦这么改,代码中其它数百处引用这个 list 成员的地方,就需要一一修改了,成本很高。
如果能让 list 变成类似 C++ 中的引用变量,似乎可以解决问题,但是 Linux Kernel 不支持 C++
请问 C 语言里,是否还存在一些其它的可能性,可以避免更新所有引用 list 变量的代码?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.