首页 > 开发 > linux > 正文

[C] 内核中的双向链表在上层应用是否会有问题?(list.h)

2017-09-11 20:33:12  来源: 网友分享

我将内核中的双向链表的list.h文件放到上层使用(目前在Ubuntu系统上暂时未出现问题),是否会隐含着一些问题???

由于list.h里面使用到了内核的一些头文件不能包括在上层应用中,我将一些宏直接移植到了list.h里面,其它代码没有任何的变动。移植的宏如下:

#define prefetch(x) __builtin_prefetch(x)#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({            \    const typeof( ((type *)0)->member ) *__mptr = (ptr);    \    (type *)( (char *)__mptr - offsetof(type,member) );})

有的文章在上层应用中使用list.h文件时,采用“在编译中使用‘-D KERNEL’开关‘欺骗’编译器”的方法是否妥当?(这与我单独将list.h文件提取到上层应用没有本质的区别)

解决方案

不会有问题,这是GNU/c编译器扩展,但是使用的时候要小心,不能加入同一个节点,否则会形成环路、另外内核的红黑树也是可以拿出来用的,这些结构的实现都非常的细致。就目前我的使用来看我没有加任何的关于这个文件的编译选项,只需要把 list.h文件提取出来,把上面几个宏加上就可以