2012-08-11 7 views

Antwort

15

Wenn Ihre Lesefunktion ausgeführt wird, geschieht dies im Zusammenhang mit dem Prozess, der den Systemaufruf ausgelöst hat. Sie sollten daher current, d. H. current->pid, verwenden können.

+0

was ist aktuell? Lesen erhält keinen aktuellen Wert als Argument ... ssize_t (* lesen) (struct file *, char __user *, size_t, loff_t *); – 0x90

+2

@ 0x90 Es ist ein Makro. – cnicutar

+0

http://kernelnewbies.org/FAQ/current, richtig? – 0x90

7

Heutzutage haben wir einige Hilfsfunktionen in sched.h definiert. Im Fall von PID können Sie verwenden:

pid = task_pid_nr(current); 

, um die aktuelle Aufgabe pid.

Hier ist der Kommentar aus include/linux/sched.h ab v3.8.

die Helfer die Aufgabe der verschiedenen PIDs zu erhalten, wie sie aus verschiedenen Namensräumen

  • task_xid_nr() zu sehen sind: global-ID, das heißt der von dem init-Namensraum gesehen id;
  • task_xid_vnr(): virtuelle ID, d. H. Die ID aus dem PID-Namespace des aktuellen gesehen.
  • task_xid_nr_ns(): id von der angegebenen ns gesehen;
  • set_task_vxid(): weist einer Aufgabe eine virtuelle ID zu;

siehe auch pid_nr() usw. in include/linux/pid.h

2

Auf einem Kernel 2.6.39 Arm zu bauen, wenn current->pid nicht funktioniert, dann es von getan werden kann:

pid_nr(get_task_pid(current, PIDTYPE_PID)) 

Die PIDTYPE_PID kann durch PIDTYPE_PGID oder PIDTYPE_SID ersetzt werden. Die Header-Quelle ist bei include/linux/pid.h, wie Yasushi darauf hinwies.

Welche der Ansätze funktioniert, hängt davon ab, welche Header-Dateien der Code verwendet.