ИМЯ
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.
ВЕРСИИ
Функция
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
равно
нулю.