可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Do I need to include a library? Can anyone please elaborate in it?
I know is used to get the process id of the current task where is being called from
But I want to printk something with current->pid
printk("My current process id/pid is %d\n", current->pid);
...and is giving me an error
error: dereferencing pointer to incomplete type
回答1:
You're looking for #include <linux/sched.h>
. That's where task_struct
is declared.
回答2:
Your code should work. You are probably missing some header.
current
is a per-cpu variable defined in linux/arch/x86/include/asm/current.h
(all the code is for the case of x86):
DECLARE_PER_CPU(struct task_struct *, current_task); static __always_inline struct task_struct *get_current(void) { return percpu_read_stable(current_task); } #define current get_current()
current
points to the task running on a CPU at a given moment. Its type is struct task_struct
and it is defined in linux/include/linux/sched.h
:
struct task_struct { ... pid_t pid; // process identifier pid_t tgid; // process thread group id ... };
You can browse the code for these files in the Linux Cross Reference:
回答3:
I think you're looking for the getpid() system call. I don't know what current
is though.