GETAUXVAL(3) | Руководство программиста Linux | GETAUXVAL(3) |
ИМЯ¶
getauxval - возвращает значение из вспомогательного вектора
СИНТАКСИС¶
#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);
ОПИСАНИЕ¶
Функция getauxval() возвращает значения из вспомогательного вектора — механизма, с помощью которого ядерный загрузчик двоичных файлов ELF передаёт информацию в пользовательское пространство при выполнении программы.
Каждая запись в вспомогательном векторе состоит из пары значений: типа — которым определяется смысл записи и значением этого типа. Согласно аргументу type, getauxval() возвращает соответствующее значение.
Значения для типов для type представлены в списке далее. Не все значения type есть для всех архитектур.
- AT_BASE
- Основной (base) адрес программного интерпретатора (обычно, динамического компоновщика).
- AT_BASE_PLATFORM
- Строка, определяющая реальную платформу; может отличаться от AT_PLATFORM (только для PowerPC).
- AT_CLKTCK
- Частота, с которой считает times(2). Это значение также может быть получено с помощью sysconf(_SC_CLK_TCK).
- AT_DCACHEBSIZE
- Размер блока кэша данных.
- AT_EGID
- Эффективный идентификатор группы нити.
- AT_ENTRY
- Адрес точки старта (entry address) исполняемого файла.
- AT_EUID
- Эффективный идентификатор пользователя нити.
- AT_EXECFD
- Файловый дескриптор программы.
- AT_EXECFN
- Путь, использованный для запуска программы.
- AT_FLAGS
- Флаги (не используется).
- AT_FPUCW
- Используемое слово управления FPU (только для SuperH). Оно даёт некоторую информацию о нагрузке FPU, выполняемой ядром.
- AT_GID
- Реальный идентификатор группы нити.
- AT_HWCAP
- Битовая маска, зависящая от архитектуры и двоичного программного интерфейса, подробно описывает возможности процессора. Содержимое битовой маски зависит от аппаратуры (например, в файле исходного кода ядра arch/x86/include/asm/cpufeature.h описана маска для архитектуры Intel x86; возвращаемое значение — первое 32-битное слово описываемого здесь массива). Эта же информация в формате, понятном человеку, доступна в файле /proc/cpuinfo.
- AT_HWCAP2 (начиная с glibc 2.18)
- Дополнительные упоминания о возможностях процессора.
- AT_ICACHEBSIZE
- Размер блока кэша инструкций.
- AT_PAGESZ
- Размер системной страницы (это же значение возвращается sysconf(_SC_PAGESIZE)).
- AT_PHDR
- Адрес заголовков программы исполняемого файла.
- AT_PHENT
- Размер элемента заголовка программы.
- AT_PHNUM
- Количество заголовков программы.
- AT_PLATFORM
- Указатель на строку, описывающую аппаратную платформу, на которой выполняется программа. Динамический компоновщик использует её при рассмотрении значений rpath.
- AT_RANDOM
- Адрес 16 байт, содержащих произвольное значение.
- AT_SECURE
- Содержит ненулевое значение, если исполняемый файл должен считаться безопасным. Чаще всего, ненулевое значение означает, что процесс выполняет программу с установленным set-user-ID или set-group-ID битом (то есть его реальный и эффективный UID или GID отличаются от начального) или же он получает мандаты, запуская двоичный файл с другими мандатами (смотрите capabilities(7)). Также ненулевое значение может выставляться Linux Security Module. Если значение не ноль, то динамический компоновщик прекращает использовать определённые переменные окружения (смотрите ld-linux.so(8)) и изменяется некоторое поведение glibc (также смотрите secure_getenv(3)).
- AT_SYSINFO
- Точка входа в функцию системного вызова в vDSO. Отсутствует/не нужна для всех архитектур (например, отсутствует на x86-64).
- AT_SYSINFO_EHDR
- Адрес страницы, содержащий виртуальный Динамический Общий Объект (Dynamic Shared Object, vDSO), который ядро создаёт для предоставления более быстрой реализации некоторых системных вызовов.
- AT_UCACHEBSIZE
- Размер блока универсального кэша.
- AT_UID
- Реальный идентификатор пользователя нити.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении getauxval() возвращает значение, соответствующее type.Если type не найден, то возвращается 0.
ОШИБКИ¶
- ENOENT (начиная с glibc 2.19)
- В вспомогательном векторе не найдено значение, соответствующее type.
ВЕРСИИ¶
Функция getauxval() впервые появилась в glibc 2.16.
АТРИБУТЫ¶
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
getauxval() | Безвредность в нитях | MT-Safe |
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Эта функция является нестандартным расширением glibc.
ЗАМЕЧАНИЯ¶
The primary consumer of the information in the auxiliary vector is the dynamic linker ld-linux.so(8). The auxiliary vector is a convenient and efficient shortcut that allows the kernel to communicate a certain set of standard information that the dynamic linker usually or always needs. In some cases, the same information could be obtained by system calls, but using the auxiliary vector is cheaper.
Вспомогательный вектор располагается выше списка аргументов и окружения в адресном пространстве процесса. Переданный программе вектор можно просмотреть установив переменную окружения LD_SHOW_AUXV и запустив программу:
$ LD_SHOW_AUXV=1 sleep 1
Вспомогательный вектор любого процесса может быть получен (при наличии прав доступа) через /proc/[pid]/auxv; подробней смотрите в proc(5).
ДЕФЕКТЫ¶
До того как ошибка ENOENT не была добавлена в glibc 2.19, не было способа достоверно определить, что type не найден, если значение type равно нулю.
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. | GNU |