当前位置: 技术问答>linux和unix
current宏的使用
来源: 互联网 发布时间:2016-11-10
本文导语: int main(void) { struct task_struct *task; struct list_head *list; list_for_each(list, ¤t->children) { task = list_entry(list, struct task_struct, sibling); } return 0; } Linux内核设计与实现上有上面这...
int main(void)
{
struct task_struct *task;
struct list_head *list;
list_for_each(list, ¤t->children)
{
task = list_entry(list, struct task_struct, sibling);
}
return 0;
}
Linux内核设计与实现上有上面这段程序,用于获得一个进程的所有子进程。
然后这段程序并没有加头文件,从其它资料得知current宏被包涵在中,但是编译时报错:
fatal error: asm/current.h: No such file or directory
我用的Linux是Linux ubuntu 2.6.35,在/usr/include/asm/文件夹下确实没发现此头文件,而在2.6.22.6源码中却有此头文件。此问题困扰我很久,从网上也没有查到能解决此问题的方法。请朋友们帮忙,谢谢!
|
这个肯定是可以用的,只要你有头文件和库文件,就是可以的。你的这个例子在2.6.22.6是可以运行的,在你的OS不能用,仅仅是因为缺少头文件。内核和应用只是一个层次上的划分而已
|
内核代码跟应用层的代码是有分别的。current应该是属于内核的东西,因此不能用于应用层的程序中。
——一个明显的区别,它们所包含的头文件是不同的。/usr/include下面的头文件是我们常见程序的头文件,而内核有自己的头文件。
——一个明显的区别,它们所包含的头文件是不同的。/usr/include下面的头文件是我们常见程序的头文件,而内核有自己的头文件。
|
是要解决这个编译问题么?是的话,只要copy出那个current的宏代码到你的当前系统即可,
#define current get_current()
另外这个文件肯定有对相应头文件的引用,不然那些函数和数据结构定义哪里去找。而且你编译时报的错误应该是这个文件包含了对asm/current.h的引用,但是当前系统又没有才报的错
#define current get_current()
另外这个文件肯定有对相应头文件的引用,不然那些函数和数据结构定义哪里去找。而且你编译时报的错误应该是这个文件包含了对asm/current.h的引用,但是当前系统又没有才报的错