Warum gibt es einen Typ für Prozess-IDs (pid_t), aber nicht für Datei-Deskriptoren (fd)?

Warum gibt es einen Typ für Prozess-IDs (pid_t), aber nicht für Datei-Deskriptoren (fd)?

Ich sehe, dass pid_tder Typ in definiert ist unistd.hund Dateideskriptoren so definiert sind, dass sie intin sind fcntl.h. Aber da sie auf ähnliche Weise verwendet werden, wäre es dann nicht sinnvoll, einen typedeffür Dateideskriptoren zu haben?

Antwort1

Bevor ich die anderen Antworten gelesen habe, war meine Vermutung, dass es pid_taus Portabilitätsgründen existiert. In der guten alten Zeit hatten einige Unixe shortPIDs, andere hatten intPIDs, also definiert man einen systemspezifischen Typ für PID. Ich kann mich nicht erinnern, dass die Verwendung intfür einen Dateideskriptor Probleme bereitet hätte, nicht einmal in den frühen Tagen der 64-Bit-Version.

Antwort2

Ich denke, dass dies ein philosophischer Unterschied zwischen dem C-Standard (fcntl.h) und dem POSIX-Standard (unistd.h) ist. C hat so wenige Typen wie nötig (einschließlich size_t und time_t), während POSIX so viele Typen hat, wie den Code übersichtlicher machen (wie pid_t, gid_t und size_t).

Antwort3

PID kann für funktionalere Zwecke verwendet werden, um den eindeutigen Prozess in Bezug auf bestimmte Parameter (z. B. Zeit, Größe, Dauer usw.) zu identifizieren. Dies erleichtert das Aufrufen des spezifischen PID, da derselbe Prozess über einen bestimmten Zeitraum hinweg mehrmals auftreten kann. Dateideskriptoren benötigen keinen Typ, da die Datei selbst problemlos mit ihrem eindeutigen Namen aufgerufen werden kann.

verwandte Informationen