10

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
  • what version of linux are you using? Commented May 31, 2012 at 17:32

3 Answers 3

15

You're looking for #include <linux/sched.h>. That's where task_struct is declared.

Sign up to request clarification or add additional context in comments.

3 Comments

+1 I think you actually answered the question, as opposed to me.
@RobI Thanks. I'm not entirely sure either, but I think the question is about kernel programming, given the previous question.
#include <linux/kernel.h> is needed as well. Thanks!
7

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:

Comments

-2

I think you're looking for the getpid() system call. I don't know what current is though.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.