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

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

3 Solutions collect form web for “Почему существует тип идентификаторов процессов (pid_t), но не для файловых дескрипторов (fd)?”

Прежде чем читать другие ответы, я предполагал, что pid_t существует по причинам мобильности. В Good Ol 'Days некоторые Unixes имели short PID, у других были int PID, поэтому вы определяете системный тип для PID. Я не могу вспомнить, какая боль связана с использованием int для файлового дескриптора, даже в самые ранние дни 64-битности.

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

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

  • Как скомпилировать программы на Linux-системах, когда у меня нет привилегий sudo для установки зависимостей dev
  • Должен ли я понизить gcc для устаревшего кода?
  • mod_rewrite: undefined symbol: lstat error
  • Резервная память в ОЗУ и в нужном физическом положении
  • Команда, которая отбрасывает строки исходного файла C
  • Использование strace для файла C
  • Баш-оболочка, запущенная forkpty (), порождает дочерние процессы, игнорирующие SIGINT. Почему и как я могу гарантировать, что SIGINT не игнорируется?
  • Есть ли более новая версия gcc в красной шляпе?
  • Почему Linux имеет компилятор C по умолчанию?
  • Почему FreeBSD обесценивает GCC в пользу Clang / LLVM?
  • 0-127 предел диапазона на WEXITSTATUS в старой Unix?
  • Linux и Unix - лучшая ОС в мире.