When you compile your kernel, __KERNEL__
is defined on the command line.
User-space programs need access to the kernel headers, but some of the info in kernel headers is intended only for the kernel. Wrapping some statements in an#ifdef __KERNEL__/#endif
block ensures that user-space programs don't see those statements.
example:
in the user space ,if you want to include the header using ‘#ifdef __KERNEL__ XXXX', you should define the __KERNEL__.
/*为了引用kernel中的数据结构,我常用如下样式include那些服务于内核的头文件*/
#ifdef __KERNEL__
#include <linux/list.h>
#include <linux/mm.h>
#undef __KERNEL__
/*将两种类型的头文件隔离开来*/
#include <stdio.h>
#include <errno.h>