current宏的使用

C/C++ code

int main(void)
{
    struct task_struct *task;
    struct list_head *list;

    list_for_each(list, &current->children)
    {
        task = list_entry(list, struct task_struct, sibling);
    }

    return 0;
}


Linux内核设计与实现上有上面这段程序,用于获得一个进程的所有子进程。
然后这段程序并没有加头文件,从其它资料得知current宏被包涵在<asm/current.h>中,但是编译时报错:

fatal error: asm/current.h: No such file or directory

我用的Linux是Linux ubuntu 2.6.35,在/usr/include/asm/文件夹下确实没发现此头文件,而在2.6.22.6源码中却有此头文件。此问题困扰我很久,从网上也没有查到能解决此问题的方法。请朋友们帮忙,谢谢!

作者: bryce_xiao   发布时间: 2011-02-28

内核代码跟应用层的代码是有分别的。current应该是属于内核的东西,因此不能用于应用层的程序中。
——一个明显的区别,它们所包含的头文件是不同的。/usr/include下面的头文件是我们常见程序的头文件,而内核有自己的头文件。

作者: subfate   发布时间: 2011-02-28