sigstack 子例程
用途
设置和获取信号堆栈上下文。
库
标准 C 库 (libc.a)
语法
描述
sigstack 子例程定义要处理信号的备用堆栈。
当信号发生并且其处理程序要在信号堆栈上运行时,系统会检查进程是否已在该堆栈上运行。 如果是这样,那么即使在处理程序返回后,它也会继续执行此操作。 如果没有,信号处理程序将在信号堆栈上运行,当处理程序返回时将恢复原始堆栈。
使用 sigvec 或 sigaction 子例程来指定给定的信号处理程序例程是否在信号堆栈上运行。
注意: 信号堆栈不会像常规堆栈那样自动增大大小。 如果堆栈溢出,那么可能会发生不可预测的结果。
参数
| 项 | 描述 |
|---|---|
| InStack | 指定新信号堆栈的堆栈指针。 如果 InStack 参数的值为非零,那么它将指向具有以下成员的 sigstack 结构: 值InStack->ss_sp指定新信号堆栈的堆栈指针。 因为堆栈从数字上更大的地址增长到更低的地址,所以传递到 sigstack 子例程的堆栈指针应该指向要使用的堆栈区域的数字高端。InStack->ss_onstack如果进程当前正在该堆栈上运行,那么应该设置为值 1; 否则,应该设置为值 0。 如果 InStack 参数的值为 0 (即,空指针) ,那么不会设置信号堆栈状态。 |
| OutStack | 指向存储当前信号堆栈状态的结构。 如果 OutStack 参数的值非零,那么它指向一个 sigstack 结构, sigstack 子例程将当前信号堆栈状态存储到该结构中。 如果 OutStack 参数的值为 0 ,那么不会报告先前的信号堆栈状态。 |
返回值
成功完成后, sigstack 子例程将返回值 0。 否则,返回值为-1,并设置 errno全局变量来指示错误。
错误代码
sigstack 子例程不成功,如果以下情况成立,那么信号堆栈上下文保持不变:
| 项 | 描述 |
|---|---|
| Efault | InStack 或 OutStack 参数点位于进程的地址空间外部。 |