personality - задаёт
домен
исполнения
процесса
Standard C library (
libc,
-lc)
#include <sys/personality.h>
int personality(unsigned long persona);
Linux
поддерживает
несколько
видов
доменов
исполнения
процессов
или
специализаций
(personalities) для
каждого
процесса.
Среди
прочего,
домены
исполнения
указывают Linux
как
связывать
номера
сигналов с
обработчиками
сигналов.
Система
доменов
исполнения
позволяет Linux
частично
поддерживать
программы,
собранные
в других ОС,
подобных UNIX.
Если
значение
persona не равно
0xffffffff, то
personality()
установит
домен
исполнения
вызывающего
равным
значению
persona. Если
значение
persona равно 0xffffffff,
то
возвращается
текущую
специализацию
(persona) не
изменяя её.
Список
доступных
доменов
исполнения
можно
найти в
<sys/personality.h>. Домен
исполнения
— это
32-битное
значение, в
котором
верхние
три байта
отведены
под флаги,
заставляющие
ядро
изменить
поведение
определённых
системных
вызов,
чтобы они
эмулировали
устаревшие
или
архитектурные
особенности.
Младший
байт
содержит
значение,
определяющее
специализацию,
которую
должно
предполагать
ядро.
Значения
флагов:
-
ADDR_COMPAT_LAYOUT
(начиная с Linux
2.6.9)
- При
указании
этого
флага
предоставляется
устаревшая
раскладка
виртуального
адресного
пространства.
-
ADDR_NO_RANDOMIZE
(начиная с Linux
2.6.12)
- При
указании
этого
флага
отключается
случайное
расположение
виртуального
адресного
пространства.
-
ADDR_LIMIT_32BIT
(начиная с Linux
2.2)
- Ограничивает
адресное
пространство
32 битами.
-
ADDR_LIMIT_3GB
(начиная с Linux
2.4.0)
- При
указании
этого
флага
значение
0xc0000000
используется
как
смещение,
по
которому
ищется
блок (chunk)
виртуальной
памяти в mmap(2);
в
противном
случае
используется
0xffffe000.
-
FDPIC_FUNCPTRS
(начиная с Linux
2.6.11)
- Указатели
на функции
пользовательского
пространства
для
сигнальных
обработчиков
указывают
(на
определённых
архитектурах)
на
дескрипторы.
-
MMAP_PAGE_ZERO
(начиная с Linux
2.4.0)
- Отображать
страницу 0
только для
чтения (для
поддержки
двоичных
файлов,
зависящих
от такого
поведения
согласно
SVr4).
-
READ_IMPLIES_EXEC
(начиная с Linux
2.6.8)
- При
указании
этого
флага
операция
PROT_READ в mmap(2)
подразумевает
и PROT_EXEC.
-
SHORT_INODE
(начиная с Linux
2.4.0)
- Никак не
влияет(?).
-
STICKY_TIMEOUTS
(начиная с Linux
1.2.0)
- При
указании
этого
флага
вызовы select(2),
pselect(2) и ppoll(2) не
изменяют
возвращаемый
аргумент
ожидания,
если их
работа
прерывается
обработчиком
сигнала.
-
UNAME26
(начиная с Linux
3.1)
- Have uname(2) report a 2.6.40+ version number rather
than a 3.x version number. Added as a stopgap measure to support broken
applications that could not handle the kernel version-numbering switch
from Linux 2.6.x to Linux 3.x.
-
WHOLE_SECONDS
(начиная с Linux
1.2.0)
- Никак не
влияет.
Список
доступных
доменов
исполнения:
-
PER_BSD
(начиная с Linux
1.2.0)
- BSD. (Никак
не влияет)
-
PER_HPUX
(начиная с Linux
2.4)
- Поддержка
32-битного HP/UX.
Никогда не
была
полной и
удалена
начиная с Linux
4.0, данное
значение
никак не
влияет на
работу.
-
PER_IRIX32
(начиная с Linux
2.2)
- Поддержка
32-битного IRIX 5.
Никогда
полностью
не
работала;
удалена в Linux
2.6.27.
Подразумевает
STICKY_TIMEOUTS.
-
PER_IRIX64
(начиная с Linux
2.2)
- IRIX 6, 64-битная
версия.
Подразумевает
STICKY_TIMEOUTS; в
противном
случае
никак не
влияет.
-
PER_IRIXN32
(начиная с Linux
2.2)
- IRIX 6, новая
32-битная
версия.
Подразумевает
STICKY_TIMEOUTS; в
противном
случае
никак не
влияет.
-
PER_ISCR4
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS; в
противном
случае
никак не
влияет.
-
PER_LINUX
(начиная с Linux
1.2.0)
- Linux.
-
PER_LINUX32
(начиная с Linux
2.2)
- [Будет
описано.]
-
PER_LINUX32_3GB
(начиная с Linux
2.4)
- Подразумевает
ADDR_LIMIT_3GB.
-
PER_LINUX_32BIT
(начиная с Linux
2.0)
- Подразумевает
ADDR_LIMIT_32BIT.
-
PER_LINUX_FDPIC
(начиная с Linux
2.6.11)
- Подразумевает
FDPIC_FUNCPTRS.
-
PER_OSF4
(начиная с Linux
2.4)
- OSF/1 v4. На alpha,
очищает
верхние 32
бита iov_len в
пользовательском
буфере для
совместимости
со старыми
версиями OSF/1,
где iov_len
определено
как int.
-
PER_OSR5
(начиная с Linux
2.4)
- Подразумевает
STICKY_TIMEOUTS и WHOLE_SECONDS; в
противном
случае
никак не
влияет.
-
PER_RISCOS
(начиная с Linux
2.2)
- [Будет
описано.]
-
PER_SCOSVR3
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS, WHOLE_SECONDS и SHORT_INODE;
в
противном
случае
никак не
влияет.
-
PER_SOLARIS
(начиная с Linux
2.4)
- Подразумевает
STICKY_TIMEOUTS; в
противном
случае
никак не
влияет.
-
PER_SUNOS
(начиная с Linux
2.4.0)
- Подразумевает
STICKY_TIMEOUTS.
Библиотека
отклонений
и
динамический
компоновщик
ищутся в
/usr/gnemul.
Содержит
ошибки,
практически
не
сопровождается
и почти
никем не
используется;
поддержка
была
удалена в Linux
2.6.26.
-
PER_SVR3
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS и SHORT_INODE; в
противном
случае
никак не
влияет.
-
PER_SVR4
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS и MMAP_PAGE_ZERO; в
противном
случае
никак не
влияет.
-
PER_UW7
(начиная с Linux
2.4)
- Подразумевает
STICKY_TIMEOUTS и MMAP_PAGE_ZERO; в
противном
случае
никак не
влияет.
-
PER_WYSEV386
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS и SHORT_INODE; в
противном
случае
никак не
влияет.
-
PER_XENIX
(начиная с Linux
1.2.0)
- Подразумевает
STICKY_TIMEOUTS и SHORT_INODE; в
противном
случае
никак не
влияет.
On success, the previous
persona is returned. On error, -1 is returned,
and
errno is set to indicate the error.
- EINVAL
- Ядру не
удалось
изменить
специализацию.
Данный
системный
вызов
впервые
появился в
Linux 1.1.20 (и, таким
образом, в
первом
стабильном
выпуске
ядра Linux 1.2.0);
поддержка
в glibc
добавлена
в версии 2.3.
Вызов
personality()
есть
только в Linux, и
он не
должен
использоваться
в
переносимых
программах.
setarch(8)
Русский
перевод
этой
страницы
руководства
был сделан
Alexey, Azamat Hackimov <
[email protected]>, kogamatranslator49
<
[email protected]>, Kogan, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]