getauxval -
возвращает
значение
из
вспомогательного
вектора
Standard C library (
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.
-
ENOENT
(начиная с glibc
2.19)
- В
вспомогательном
векторе не
найдено
значение,
соответствующее
type.
The
getauxval() function was added in 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
равно нулю.
execve(2),
secure_getenv(3),
vdso(7),
ld-linux.so(8)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Vladislav <
[email protected]>,
Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]