sigstack 子例程

用途

设置和获取信号堆栈上下文。

标准 C 库 (libc.a)

语法

#include <signal.h>

int sigstack ( InStack,  OutStack)
struct sigstack *InStack, *OutStack;

描述

sigstack 子例程定义要处理信号的备用堆栈。

当信号发生并且其处理程序要在信号堆栈上运行时,系统会检查进程是否已在该堆栈上运行。 如果是这样,那么即使在处理程序返回后,它也会继续执行此操作。 如果没有,信号处理程序将在信号堆栈上运行,当处理程序返回时将恢复原始堆栈。

使用 sigvecsigaction 子例程来指定给定的信号处理程序例程是否在信号堆栈上运行。

注意: 信号堆栈不会像常规堆栈那样自动增大大小。 如果堆栈溢出,那么可能会发生不可预测的结果。

参数

描述
InStack 指定新信号堆栈的堆栈指针。

如果 InStack 参数的值为非零,那么它将指向具有以下成员的 sigstack 结构:

caddr_t   ss_sp;
int   ss_onstack;

InStack->ss_sp指定新信号堆栈的堆栈指针。 因为堆栈从数字上更大的地址增长到更低的地址,所以传递到 sigstack 子例程的堆栈指针应该指向要使用的堆栈区域的数字高端。InStack->ss_onstack如果进程当前正在该堆栈上运行,那么应该设置为值 1; 否则,应该设置为值 0。

如果 InStack 参数的值为 0 (即,空指针) ,那么不会设置信号堆栈状态。

OutStack 指向存储当前信号堆栈状态的结构。

如果 OutStack 参数的值非零,那么它指向一个 sigstack 结构, sigstack 子例程将当前信号堆栈状态存储到该结构中。

如果 OutStack 参数的值为 0 ,那么不会报告先前的信号堆栈状态。

返回值

成功完成后, sigstack 子例程将返回值 0。 否则,返回值为-1,并设置 errno全局变量来指示错误。

错误代码

sigstack 子例程不成功,如果以下情况成立,那么信号堆栈上下文保持不变:

描述
Efault InStackOutStack 参数点位于进程的地址空间外部。