PERSONALITY - Linux手册页

时间:2019-08-20 17:59:07  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

personality-设置流程执行域

语法

#include <sys/personality.h>
int personality(unsigned long persona);

说明

Linux为每个进程支持不同的执行域或个性。执行域除其他外还告诉Linux如何将信号编号映射为信号动作。执行域系统允许Linux为在其他类似UNIX的操作系统下编译的二进制文件提供有限的支持。

如果角色不是0xffffffff,则personality()会将调用者的执行域设置为角色指定的值。将角色指定为0xffffffff可提供一种无需更改即可检索当前角色的方法。

可以在中找到可用执行域的列表。执行域是一个32位的值,其中标志的前三个字节留在了前三个字节,这些标志使内核修改某些系统调用的行为,以模仿历史或体系结构上的怪癖。最低有效字节是一个值,它定义内核应该采用的个性。标志值如下:

ADDR_COMPAT_LAYOUT(since Linux 2.6.9)
设置此标志后,提供旧版虚拟地址空间布局。
ADDR_NO_RANDOMIZE(since Linux 2.6.12)
设置此标志后,禁用地址空间布局随机化。
ADDR_LIMIT_32BIT(since Linux 2.2)
将地址空间限制为32位。
ADDR_LIMIT_3GB(since Linux 2.4.0)
设置此标志后,将0xc0000000用作在mmap(2)上搜索虚拟内存块的偏移量。否则使用0xffffe000。
FDPIC_FUNCPTRS(since Linux 2.6.11)
指向信号处理程序的用户空间函数指针(在某些体系结构上)指向描述符。
MMAP_PAGE_ZERO(since Linux 2.4.0)
将页面0映射为只读(以支持依赖于此SVr4行为的二进制文件)。
READ_IMPLIES_EXEC(since Linux 2.6.8)
设置此标志后,PROT_READ表示mmap(2)的PROT_EXEC。
SHORT_INODE(since Linux 2.4.0)
没有效果(?)。
STICKY_TIMEOUTS(since Linux 1.2.0)
设置此标志后,当被信号处理程序中断时,select(2),pselect(2)和ppoll(2)不会修改返回的超时参数。
UNAME26(since Linux 3.1)
uname(2)报告2.6.40+版本号,而不是3.x版本号。作为权宜之计,添加了此功能以支持无法处理从2.6.x到3.x的内核版本编号切换的损坏的应用程序。
WHOLE_SECONDS(since Linux 1.2.0)
没有效果(?)。

可用的执行域为:

PER_BSD(since Linux 1.2.0)
BSD。 (没有效果。)
PER_HPUX(since Linux 2.4)
支持32位HP / UX。此支持从未完成,因此已放弃,因此从Linux 4.0开始,此值无效。
PER_IRIX32(since Linux 2.2)
IRIX 5 32位。永远不会完全发挥作用; Linux 2.6.27中不再支持。表示STICKY_TIMEOUTS。
PER_IRIX64(since Linux 2.2)
IRIX 6 64位。表示STICKY_TIMEOUTS;否则没有效果。
PER_IRIXN32(since Linux 2.2)
IRIX 6新的32位。表示STICKY_TIMEOUTS;否则没有效果。
PER_ISCR4(since Linux 1.2.0)
表示STICKY_TIMEOUTS;否则没有效果。
PER_LINUX(since Linux 1.2.0)
Linux。
PER_LINUX32(since Linux 2.2)
[待记录。]
PER_LINUX32_3GB(since Linux 2.4)
表示ADDR_LIMIT_3GB。
PER_LINUX_32BIT(since Linux 2.0)
表示ADDR_LIMIT_32BIT。
PER_LINUX_FDPIC(since Linux 2.6.11)
表示FDPIC_FUNCPTRS。
PER_OSF4(since Linux 2.4)
OSF / 1 v4。在alpha上,清除用户缓冲区中iov_len的前32位,以与旧版本的OSF / 1(其中iov_len定义为)兼容。诠释
PER_OSR5(since Linux 2.4)
表示STICKY_TIMEOUTS和WHOLE_SECONDS;否则没有效果。
PER_RISCOS(since Linux 2.2)
[待记录。]
PER_SCOSVR3(since Linux 1.2.0)
表示STICKY_TIMEOUTS,WHOLE_SECONDS和SHORT_INODE;否则没有效果。
PER_SOLARIS(since Linux 2.4)
表示STICKY_TIMEOUTS;否则没有效果。
PER_SUNOS(since Linux 2.4.0)
表示STICKY_TIMEOUTS。将库和动态链接器搜索转移到/ usr / gnemul。越野车,基本上没有维护,几乎完全没有使用;在Linux 2.6.26中删除了该支持。
PER_SVR3(since Linux 1.2.0)
表示STICKY_TIMEOUTS和SHORT_INODE;否则没有效果。
PER_SVR4(since Linux 1.2.0)
表示STICKY_TIMEOUTS和MMAP_PAGE_ZERO;否则没有效果。
PER_UW7(since Linux 2.4)
表示STICKY_TIMEOUTS和MMAP_PAGE_ZERO;否则没有效果。
PER_WYSEV386(since Linux 1.2.0)
表示STICKY_TIMEOUTS和SHORT_INODE;否则没有效果。
PER_XENIX(since Linux 1.2.0)
表示STICKY_TIMEOUTS和SHORT_INODE;否则没有效果。

返回值

成功后,将返回上一个角色。如果出错,则返回-1,并正确设置errno。

错误说明

EINVAL
内核无法更改个性。

版本

该系统调用首先出现在Linux 1.1.20中(因此首先出现在Linux 1.2.0的稳定内核发行版中)。库支持在glibc 2.3中添加。

遵循规范

ality()是特定于Linux的,不应在旨在可移植的程序中使用。

另外参见

setarch(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/