Почему существует тип для идентификаторов процессов (pid_t), но не для дескрипторов файлов (fd)?

Почему существует тип для идентификаторов процессов (pid_t), но не для дескрипторов файлов (fd)?

Я вижу, что pid_ttypedef'ed в unistd.h, а файловые дескрипторы определены как int. fcntl.hНо поскольку они используются схожими способами, разве не имело бы смысла иметь typedefдля файловых дескрипторов?

решение1

До прочтения других ответов я предполагал, что это pid_tсуществует из соображений переносимости. В старые добрые времена некоторые Unix имели shortPID, другие имели intPID, поэтому вы определяете системно-специфичный тип для PID. Я не могу вспомнить никаких проблем, связанных с использованием intдля файлового дескриптора, даже в самые ранние дни 64-битности.

решение2

Я думаю, что это разница в философии между стандартом C (fcntl.h) и стандартом POSIX (unistd.h). В C столько типов, сколько необходимо (включая size_t и time_t), тогда как в POSIX столько типов, сколько необходимо для ясности кода (например, pid_t, gid_t и size_t).

решение3

PID может использоваться для более функциональных целей при идентификации уникального процесса в отношении определенных параметров (например, времени, размера, продолжительности и т. д.), что упрощает вызовы конкретного PID, поскольку один и тот же процесс может происходить несколько раз в течение x периода времени. Где дескрипторы файлов не нуждаются в типе, поскольку сам файл может быть легко вызван по его уникальному имени.

Связанный контент