Я вижу, что pid_t
typedef'ed в unistd.h
, а файловые дескрипторы определены как int
. fcntl.h
Но поскольку они используются схожими способами, разве не имело бы смысла иметь typedef
для файловых дескрипторов?
решение1
До прочтения других ответов я предполагал, что это pid_t
существует из соображений переносимости. В старые добрые времена некоторые Unix имели short
PID, другие имели int
PID, поэтому вы определяете системно-специфичный тип для 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 периода времени. Где дескрипторы файлов не нуждаются в типе, поскольку сам файл может быть легко вызван по его уникальному имени.