根据 SUS v2 (1997),stack_t
应在<signal.h>
- http://pubs.opengroup.org/onlinepubs/7908799/xsh/ucontext.h.html中定义
类型 sigset_t 和 stack_t 在 .
http://pubs.opengroup.org/onlinepubs/007908799/xsh/signal.h.html
标头将 stack_t 类型定义为至少包含以下成员的结构:
void *ss_sp stack base or pointer
size_t ss_size stack size
int ss_flags flags
该类型也在 glibc 文档中列出:http ://www.gnu.org/software/libc/manual/html_node/Signal-Stack.html
数据类型:stack_t
该类型在sigaltstack
函数中使用,描述为:
sigaltstack 是较新的接口,来自 4.4 BSD。...
sigaltstack
(版本 2015-07-23)的官方 Linux 手册页说:http: //man7.org/linux/man-pages/man2/sigaltstack.2.html
glibc 的功能测试宏要求(参见feature_test_macros(7)):
sigaltstack():
_BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
符合 POSIX.1-2001、POSIX.1-2009、SUSv2、SVr4。
所以,当你使用比 2.12 更新的 glibc 时,你必须定义一些宏才能使用sigaltstack
和stack_t
. 从 glibc 2.10 开始,您只需定义#define _GNU_SOURCE
启用_BSD_SOURCE
和_POSIX_C_SOURCE = 200809L