НАИМЕНОВАНИЕ
getauxval -
возвращает
значение
из
вспомогательного
вектора
БИБЛИОТЕКА
Стандартная
библиотека
языка C (libc, -lc)
ОБЗОР
#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);
ОПИСАНИЕ
Функция
getauxval()
возвращает
значения
из
вспомогательного
вектора —
механизма,
с помощью
которого
ядерный
загрузчик
двоичных
файлов ELF
передаёт
информацию
в
пользовательское
пространство
при
выполнении
программы.
Каждая
запись в
вспомогательном
векторе
состоит из
пары
значений:
типа —
которым
определяется
смысл
записи и
значением
этого типа.
Согласно
аргументу
type, getauxval()
возвращает
соответствующее
значение.
Значения
для типов
для type
представлены
в списке
далее. Не
все
значения type
есть для
всех
архитектур.
- AT_BASE
- Основной (base)
адрес
программного
интерпретатора
(обычно,
динамического
компоновщика).
- AT_BASE_PLATFORM
- 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).
- AT_CLKTCK
- Частота, с
которой
считает times(2).
Это
значение
также
может быть
получено с
помощью
sysconf(_SC_CLK_TCK).
- AT_DCACHEBSIZE
- Размер
блока кэша
данных.
- AT_EGID
- Эффективный
идентификатор
группы
нити.
- AT_ENTRY
- Адрес
точки
старта (entry address)
исполняемого
файла.
- AT_EUID
- Эффективный
идентификатор
пользователя
нити.
- AT_EXECFD
- Файловый
дескриптор
программы.
- AT_EXECFN
- A pointer to a string containing the pathname used to execute the
program.
- 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_L1D_CACHEGEOMETRY
- Структура
кэша
данных L1, в
которой
закодирован
размер
строки
кэша в
байтах в
младших 16
битах и
ассоциативность
кэша в
следующих
16 битах.
Значение
ассоциативности
N
выражается
16-битным
числом,
указывающим
на
N-канальную
ассоциативность.
- AT_L1D_CACHESIZE
- Размер
кэша
данных L1.
- AT_L1I_CACHEGEOMETRY
- Структура
кэша
инструкций
L1,
кодируется
также как
AT_L1D_CACHEGEOMETRY.
- AT_L1I_CACHESIZE
- Размер
кэша
инструкций
L1.
- AT_L2_CACHEGEOMETRY
- Структура
кэша L2,
кодируется
также как
AT_L1D_CACHEGEOMETRY.
- AT_L2_CACHESIZE
- Размер
кэша L2.
- AT_L3_CACHEGEOMETRY
- Структура
кэша L3,
кодируется
также как
AT_L1D_CACHEGEOMETRY.
- AT_L3_CACHESIZE
- Размер
кэша L3.
- 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.
АТРИБУТЫ
Описание
терминов
данного
раздела
смотрите в
attributes(7).
| Интерфейс |
Атрибут |
Значение |
| getauxval() |
Безвредность
в нитях |
MT-Safe |
ПРИМЕЧАНИЯ
Основным
пользователем
информации
из
вспомогательного
вектора
является
динамический
компоновщик
ld-linux.so(8).
Вспомогательный
вектор
удобное и
эффективное
средство
для
предоставления
ядром
некоторого
набора
стандартной
информации,
которая
обычно или
всегда
требуется
динамическому
компоновщику.
В
некоторых
случаях
эта
информация
может быть
получена
через
системные
вызовы, но
использование
вспомогательного
вектора
экономичней.
Вспомогательный
вектор
располагается
выше
списка
аргументов
и
окружения
в адресном
пространстве
процесса.
Переданный
программе
вектор
можно
просмотреть
установив
переменную
окружения
LD_SHOW_AUXV и
запустив
программу:
$ LD_SHOW_AUXV=1 sleep 1
The auxiliary vector of any process can (subject to file
permissions) be obtained via /proc/pid/auxv; see
proc(5) for more information.
ОШИБКИ
До того
как ошибка
ENOENT не была
добавлена
в glibc 2.19, не было
способа
достоверно
определить,
что type не
найден,
если
значение type
равно
нулю.
ПЕРЕВОД
Русский
перевод
этой
страницы
руководства
разработал(и)
Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh
<d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>,
Yuri Kozlov <yuray@komyakino.ru>, Иван
Павлов <pavia00@gmail.com>
и Kirill Rekhov <krekhov.dev@gmail.com>
Этот
перевод
является
свободной
программной
документацией;
он
распространяется
на
условиях
общедоступной
лицензии GNU (GNU
General Public License - GPL,
https://www.gnu.org/licenses/gpl-3.0.html
версии 3 или
более
поздней) в
отношении
авторского
права, но
БЕЗ
КАКИХ-ЛИБО
ГАРАНТИЙ.
Если вы
обнаружите
какие-либо
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
сообщите
об этом
разработчику(ам)
по его(их)
адресу(ам)
электронной
почты или
по адресу
списка
рассылки
русских
переводчиков.