2015-05-01 5 views
3

Когда я искал заголовок unistd.h, в The Open Group я обнаружил, что он содержит стандартные символические константы & и для sys/types.h он сказал для типов данных.Разница между unistd.h и sys/types.h в linux

Затем я обнаружил, что оба имеют uid_t, pid_t и несколько подобных типов.

Я смущен, почему они разделились так и в чем различия между ними. У меня есть googled, но я не получил удовлетворительных ответов.

Буду благодарен, если кто-то может дать мне подробное объяснение.

спасибо.

ответ

5

Разделение заголовка POSIX и C в мелкозернистых файлах, вероятно, происходит из старых дней, когда компиляция может занять много времени, а добавление ненужных файлов заголовков увеличило время.

Если вам нужны только типы ОС, скажем, для прототипов ваших функций, то только #include <sys/types.h>. Однако, если вам нужны определения функций, тогда вы должны #include <unistd.h> или любые другие системные заголовки, если необходимо.

Естественно, существуют типы, которые находятся в обоих заголовках, так как вы не можете объявлять некоторые функции без их необходимых типов.

Но эти разные объявления одного и того же типа гарантированно будут одинаковыми, поэтому нет проблем, если вы включите их оба.

+0

hmmm ...... Я не думал об этом: определения функций в unistd.h будут беспорядочными вещами, которые будут потреблять время во время компиляции. У меня есть представление об этом сейчас. Спасибо. –