【发布时间】:2016-11-16 06:23:47
【问题描述】:
下面我提到了我的小代码,下面是我对它的疑问 -
1.我打开了 /usr/src/linux-headers-3.13.0-32/include/linux/sched.h 并在那里找到了 struct task_struct 的声明,但是当我尝试声明一个实例时,即变量在包含sched.h头的主函数中的task_struct,那么它也无法识别task_struct,为什么? , 为什么会这样
2. 即使我在我的代码中复制了该头文件的完整代码,即我的主类之外的 .c 文件,编译器也会显示错误以包含许多其他头文件,当我没有复制 sched 的代码时这不是问题.h 在我的 .c 文件中
编译器在第一种情况下显示的错误是 - 'temp' 的存储大小未知
我的代码是(代码只是一个代表视图来告诉我的问题概念)
#include<linux/sched.h>
int main(void)
{
struct task_struct temp;
printf("%d",temp.pid);
return 0;
}
由于概念很清楚,仍然缺少一些东西,请分享您的建议。
【问题讨论】:
-
您想在实际程序中使用变量
temp做什么。我问是因为很可能有更好的解决方案根本不需要struct task_struct。 -
@pts ,今天我正在学习进程,在学习过程中,我了解到操作系统内部使用 task_struct 来存储与进程相关的信息,我只想看到它们通过C代码
-
假设你知道
#include是什么。您的程序仍然无法按预期运行,因为您没有初始化temp变量,所以temp.pid包含垃圾。 -
@Gaurav Joshi:查看
struct task_struct在 C 代码中工作的最简单方法是编写内核模块。对于初学者来说,编写内核模块并不容易,因此您可能需要先查找并阅读有关编写 Linux 内核模块的教程,或者请附近的人(可能是您的教授)在您的笔记本电脑上引导您完成整个过程。 -
@pts ,我认为我的代码(即我的C代码)的执行实例将是task_struct的初始化,因为目前我的进程正在执行,我没有想到垃圾值, 顺便感谢你激励我使用内核模块
标签: c linux struct operating-system kernel