current宏的使用

追远2015 2011-02-28 09:29:36

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宏被包涵在<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源码中却有此头文件。此问题困扰我很久,从网上也没有查到能解决此问题的方法。请朋友们帮忙,谢谢!
...全文
252 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dean_yanqing 2011-03-01
  • 打赏
  • 举报
回复
这个肯定是可以用的,只要你有头文件和库文件,就是可以的。你的这个例子在2.6.22.6是可以运行的,在你的OS不能用,仅仅是因为缺少头文件。内核和应用只是一个层次上的划分而已
追远2015 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dean_yanqing 的回复:]
是要解决这个编译问题么?是的话,只要copy出那个current的宏代码到你的当前系统即可,
#define current get_current()
另外这个文件肯定有对相应头文件的引用,不然那些函数和数据结构定义哪里去找。而且你编译时报的错误应该是这个文件包含了对asm/current.h的引用,但是当前系统又没有才报的错
[/Quote]
这段代码肯定是有头文件的,我是说书上例题写的时候没有加上头文件。

也许如#1楼说的那样,current是属于内核的东西,应用程序不能使用。
那如果一个应用程序进程想要获得它所有的子进程,Linux系统有提供其它的接口吗?
dean_yanqing 2011-02-28
  • 打赏
  • 举报
回复
是要解决这个编译问题么?是的话,只要copy出那个current的宏代码到你的当前系统即可,
#define current get_current()
另外这个文件肯定有对相应头文件的引用,不然那些函数和数据结构定义哪里去找。而且你编译时报的错误应该是这个文件包含了对asm/current.h的引用,但是当前系统又没有才报的错
李迟 2011-02-28
  • 打赏
  • 举报
回复
内核代码跟应用层的代码是有分别的。current应该是属于内核的东西,因此不能用于应用层的程序中。
——一个明显的区别,它们所包含的头文件是不同的。/usr/include下面的头文件是我们常见程序的头文件,而内核有自己的头文件。

23,220

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧