Scroll to navigation

GETAUXVAL(3) Руководство программиста Linux GETAUXVAL(3)

ИМЯ

getauxval - возвращает значение из вспомогательного вектора

СИНТАКСИС

#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);

ОПИСАНИЕ

Функция getauxval() возвращает значения из вспомогательного вектора — механизма, с помощью которого ядерный загрузчик двоичных файлов ELF передаёт информацию в пользовательское пространство при выполнении программы.

Каждая запись в вспомогательном векторе состоит из пары значений: типа — которым определяется смысл записи и значением этого типа. Согласно аргументу type, getauxval() возвращает соответствующее значение.

Значения для типов для type представлены в списке далее. Не все значения type есть для всех архитектур.

Основной (base) адрес программного интерпретатора (обычно, динамического компоновщика).
A pointer to a string (PowerPC and MIPS only). On PowerPC, this identifies the real platform; may differ from AT_PLATFORM. On MIPS, this identifies the ISA level (since Linux 5.7).
Частота, с которой считает times(2). Это значение также может быть получено с помощью sysconf(_SC_CLK_TCK).
Размер блока кэша данных.
Эффективный идентификатор группы нити.
Адрес точки старта (entry address) исполняемого файла.
Эффективный идентификатор пользователя нити.
Файловый дескриптор программы.
A pointer to a string containing the pathname used to execute the program.
Флаги (не используется).
Используемое слово управления FPU (только для SuperH). Оно даёт некоторую информацию о нагрузке FPU, выполняемой ядром.
Реальный идентификатор группы нити.
Битовая маска, зависящая от архитектуры и двоичного программного интерфейса, подробно описывает возможности процессора. Содержимое битовой маски зависит от аппаратуры (например, в файле исходного кода ядра arch/x86/include/asm/cpufeature.h описана маска для архитектуры Intel x86; возвращаемое значение — первое 32-битное слово описываемого здесь массива). Эта же информация в формате, понятном человеку, доступна в файле /proc/cpuinfo.
Дополнительные упоминания о возможностях процессора.
Размер блока кэша инструкций.
Структура кэша данных L1, в которой закодирован размер строки кэша в байтах в младших 16 битах и ассоциативность кэша в следующих 16 битах. Значение ассоциативности N выражается 16-битным числом, указывающим на N-канальную ассоциативность.
Размер кэша данных L1.
Структура кэша инструкций L1, кодируется также как AT_L1D_CACHEGEOMETRY.
Размер кэша инструкций L1.
Структура кэша L2, кодируется также как AT_L1D_CACHEGEOMETRY.
Размер кэша L2.
Структура кэша L3, кодируется также как AT_L1D_CACHEGEOMETRY.
Размер кэша L3.
Размер системной страницы (это же значение возвращается sysconf(_SC_PAGESIZE)).
Адрес заголовков программы исполняемого файла.
Размер элемента заголовка программы.
Количество заголовков программы.
Указатель на строку, описывающую аппаратную платформу, на которой выполняется программа. Динамический компоновщик использует её при рассмотрении значений rpath.
Адрес 16 байт, содержащих произвольное значение.
Содержит ненулевое значение, если исполняемый файл должен считаться безопасным. Чаще всего, ненулевое значение означает, что процесс выполняет программу с установленным set-user-ID или set-group-ID битом (то есть его реальный и эффективный UID или GID отличаются от начального) или же он получает мандаты, запуская двоичный файл с другими мандатами (смотрите capabilities(7)). Также ненулевое значение может выставляться Linux Security Module. Если значение не ноль, то динамический компоновщик прекращает использовать определённые переменные окружения (смотрите ld-linux.so(8)) и изменяется некоторое поведение glibc (также смотрите secure_getenv(3)).
Точка входа в функцию системного вызова в vDSO. Отсутствует/не нужна для всех архитектур (например, отсутствует на x86-64).
Адрес страницы, содержащий виртуальный Динамический Общий Объект (Dynamic Shared Object, vDSO), который ядро создаёт для предоставления более быстрой реализации некоторых системных вызовов.
Размер блока универсального кэша.
Реальный идентификатор пользователя нити.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении getauxval() возвращает значение, соответствующее type.Если type не найден, то возвращается 0.

ОШИБКИ

В вспомогательном векторе не найдено значение, соответствующее type.

ВЕРСИИ

Функция getauxval() впервые появилась в glibc 2.16.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
getauxval() Безвредность в нитях MT-Safe

СООТВЕТСТВИЕ СТАНДАРТАМ

Эта функция является нестандартным расширением glibc.

ЗАМЕЧАНИЯ

Основным пользователем информации из вспомогательного вектора является динамический компоновщик ld-linux.so(8). Вспомогательный вектор удобное и эффективное средство для предоставления ядром некоторого набора стандартной информации, которая обычно или всегда требуется динамическому компоновщику. В некоторых случаях эта информация может быть получена через системные вызовы, но использование вспомогательного вектора экономичней.

Вспомогательный вектор располагается выше списка аргументов и окружения в адресном пространстве процесса. Переданный программе вектор можно просмотреть установив переменную окружения LD_SHOW_AUXV и запустив программу:


$ LD_SHOW_AUXV=1 sleep 1

Вспомогательный вектор любого процесса может быть получен (при наличии прав доступа) через /proc/[pid]/auxv; подробней смотрите в proc(5).

ДЕФЕКТЫ

До того как ошибка ENOENT не была добавлена в glibc 2.19, не было способа достоверно определить, что type не найден, если значение type равно нулю.

СМ. ТАКЖЕ

secure_getenv(3), vdso(7), ld-linux.so(8)

ЗАМЕЧАНИЯ

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

9 июня 2020 г. GNU