Каково различие между различным unistd.h под/usr/include в Linux?

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

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

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

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

9
задан Tim Post 1 June 2010 в 11:07
поделиться

3 ответа

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 - это все, о чем вам нужно беспокоиться, все, что вам нужно, будет втянут в зависимости от вашей архитектуры и любых выбранных вами параметров сборки.

10
ответ дан 4 December 2019 в 13:45
поделиться

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

5
ответ дан 4 December 2019 в 13:45
поделиться

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

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

0
ответ дан 4 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: