プロセス ID (pid_t) には型があるのに、ファイル記述子 (fd) には型がないのはなぜですか?

プロセス ID (pid_t) には型があるのに、ファイル記述子 (fd) には型がないのはなぜですか?

pid_tは で typedef されておりunistd.h、ファイル記述子は で定義されていることintがわかりますfcntl.h。しかし、それらは同様の方法で使用されるため、ファイル記述子に を使用する方が合理的ではないでしょうかtypedef

答え1

他の回答を読む前は、pid_t移植性のために存在しているのだろうと推測していました。古き良き時代には、一部の Unix にはshortPID があり、他の Unix にも PID があったため、PID にはシステム固有のタイプを定義します。64ビット化のごく初期の頃でさえ、ファイル記述子にint使用することに苦労したことは思い出せません。int

答え2

これは、C 標準 (fcntl.h) と POSIX 標準 (unistd.h) の哲学の違いだと思います。C には、必要な数だけ型 (size_t や time_t など) がありますが、POSIX には、コードをわかりやすくするために必要な数だけ型 (pid_t、gid_t、size_t など) があります。

答え3

PID は、特定のパラメータ (時間、サイズ、期間など) に関連して一意のプロセスを識別するというより機能的な目的に使用できます。これにより、同じプロセスが x 時間内に複数回発生する可能性があるため、特定の PID への呼び出しが容易になります。ファイル記述子にはタイプは必要ありません。ファイル自体は一意の名前で簡単に呼び出すことができるためです。

関連情報