В чем разница между различными unistd.h в / usr / include в Linux? - PullRequest
8 голосов
/ 01 июня 2010

В каталоге / usr / include в Linux я ввел команду: find -type f -name unistd.h, который дал следующий вывод:

. / Unistd.h ./linux/unistd.h ./asm-generic/unistd.h ./bits/unistd.h ./asm/unistd.h ./sys/unistd.h

У меня вопрос, какова цель каждого unistd.h, поскольку в одной спецификации unix есть только одно определение этого файла?

Заранее спасибо.

Ответы [ 3 ]

9 голосов
/ 01 июня 2010

linux/unistd.h фактически указывает на asm/unistd.h, что, в свою очередь, указывает либо на asm/unistd_32.h, либо на asm/unistd_64.h, где номера системных вызовов определяются и представляются в пространство пользователя в зависимости от архитектуры системы. Они приходят из ядра.

bits/unistd.h - это набор макросов, которые увеличивают unistd.h (в основном это вещи, которые помогают предотвратить переполнение буфера), которые условно включаются через:

/* Define some macros helping to catch buffer overflows.  */
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
# include <bits/unistd.h>
#endif

По сути, единственный требуемый заголовок POSIX - это просто unistd.h, остальные являются либо расширениями, либо определениями из ядра. Таким образом, только включение unistd.h - это все, о чем вам нужно беспокоиться, все, что вам нужно, будет задействовано в зависимости от вашей архитектуры и выбранных вами вариантов сборки.

4 голосов
/ 01 июня 2010

Это распространенная техника в C и C ++ - у вас есть один файл со «стандартным» именем в «стандартном» месте, в данном случае ./unistd.h, и затем этот файл включает один или несколько специфичных для реализации файлы, в зависимости от макроса препроцессора. Если вы посмотрите почти на любые «стандартные» заголовочные файлы C или C ++, вы увидите их, включая другие файлы, не упомянутые ни в одном стандарте.

0 голосов
/ 01 июня 2010

В основном воспринимайте /usr/include/unistd.h как умную символическую ссылку. Это будет указывать на правильную реализацию в зависимости от ваших рабочих условий.

Тем не менее, иногда трудно понять, что это за правильная реализация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...