Как при реализации системных вызовов open/write/read... для символьного устройства модуля ядра, получить pid делающего системный вызов процесса?

Как при реализации системных вызовов open/write/read... для символьного устройства модуля ядра, получить pid делающего системный вызов процесса?

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

вот сигнатура write в структуре file_operations. Как из передаваемых аргументов получить pid процесса, делающего системный вызов ?


Ответы (1 шт):

Автор решения: Fat-Zer

В любой точке ядра текущую задачу можно получить через глобальную переменную¹ current, которая представляет собой указатель на task_struct. Соответственно её PID² можно получить как current->pid.


¹ В современных версиях ядра, технически, это обычно уже не переменная, а макрос, вызывающий функцию.
² Это то число, которое на стороне ядра называется PID, оно может отличаться от того, что под этим понимает POSIX.

→ Ссылка