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/。