我是Linux内核开发的新手。我在linux内核2.6中实现了一个系统调用my_pid。我想从系统调用中调用getpid系统调用。我该怎么办?
我想要类似的东西:
pid_t my_pid(){ return getpid(); }
同样来自用户空间中的C我可以使用以下命令调用任何系统调用:syscall();在内核模式下执行此操作的一般方法是什么?
答案 0 :(得分:9)
没有通用的方法。
如果您在内核空间,则应调用直接实现系统调用功能的内核函数而不是使用syscall
- 类型指令,或使用其他方法提取所需信息/影响所需的行动。
对于getpid()
的特定情况,您只需使用current->pid
。
内核名称current
始终是指向当前task_struct
的指针,该struct task_struct
是通过<linux/sched.h>
定义的(搜索{{1}})。访问其成员的代码通常会被内联,即当代码作为内核的一部分运行时,甚至不需要函数调用(更不用说系统调用)了。