Как при реализации системных вызовов 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 шт):
В любой точке ядра текущую задачу можно получить через глобальную переменную¹ current, которая представляет собой указатель на task_struct. Соответственно её PID² можно получить как current->pid.
¹ В современных версиях ядра, технически, это обычно уже не переменная, а макрос, вызывающий функцию.
² Это то число, которое на стороне ядра называется PID, оно может отличаться от того, что под этим понимает POSIX.