sigset , sighold , sigrelse 或 sigignore 子例程
用途
增强信号设施并提供信号管理。
库
标准 C 库 (libc.a)
语法
描述
sigset, sighold, sigrelse和 sigignore 子例程增强了信号设施,并为应用程序进程提供信号管理。
sigset 子例程指定接收 Signal 参数时要执行的系统信号操作。
sighld 和 sigrelse 子例程建立关键的代码区域。 对 sighold 子例程的调用类似于提高优先级,延迟或保持信号,直到优先级被 sigrelse降低。 sigrelse 子例程将系统信号操作恢复到先前由 sigset 结构指定的操作。
sigignore 子例程将 Signal 参数的操作设置为 SIG_IGN。
其他信号管理例程 signal不应与这些例程一起用于特定信号类型。
参数
| 项 | 描述 |
|---|---|
| Signal | 指定信号。 可以为 Signal 参数指定下列任何一个信号:
* 这些信号的缺省操作是异常终止。 |
对于可移植性,应用程序应仅使用或捕获上面列出的信号。 其他信号是依赖于硬件的信号和依赖于实现的信号,并且可能在系统中具有非常不同的含义或结果。 例如, System V 信号 (SIGEMT, SIGBUS, SIGSEGV和 SIGIOT) 与实现相关,并且未在上面列出。 特定实现可能具有其他与实现相关的信号。
| 项 | 描述 |
|---|---|
| FUNCTION | 指定选项。 Function 参数声明为返回 void 的函数的类型指针。 为 Function 参数分配了以下四个值之一: SIG_DFL, SIG_IGN, SIG_HOLD, 或信号捕获函数的 地址 。 每个值所执行的操作的定义如下:
|
| 地址 | 捕获信号。 接收到由 Signal 参数指定的信号后,接收过程将执行由 Function 参数指向的信号捕获函数。 将释放此类型的任何暂挂信号。 此地址在对其他信号管理函数 sighold 和 sigrelse的调用中保留。 信号编号 Signal 作为信号捕获函数的唯一自变量传递。 在输入信号捕获函数之前,捕获信号的 Function 参数的值设置为 SIG_HOLD。 在从信号捕获处理程序正常返回期间,系统信号操作将恢复到 Function 参数,并且将释放此类型的任何挂起信号。 如果采用非本地 goto (请参阅 setjmp 子例程) ,那么必须调用 sigrelse 子例程以恢复系统信号操作并释放此类型的任何挂起信号。 从信号捕获函数返回后,接收过程将在中断时恢复执行,但实现定义的信号可能不为真的信号除外。 当在非原子操作 (例如在慢速设备 (例如终端) 上调用 read, write, open或 ioctl 子例程) 期间发生要捕获的信号时; 在 pause 子例程期间; 在不立即返回的 wait 子例程期间,执行信号捕获函数。 然后,中断例程会向调用进程返回一个-1值,并将errno全局变量设置为EINTR。 |
返回值
成功完成后, sigset 子例程返回指定 信号的系统信号操作的先前值。 否则,将返回 SIG_ERR ,并设置 errno 全局变量以指示错误。
对于 sighold, sigrelse和 sigignore 子例程,成功时将返回值 0。 否则,返回值为-1,并设置 errno全局变量来指示错误。
错误代码
如果满足以下条件,那么 sigset, sighold, sigrelse或 sigignore 子例程将失败:
| 项 | 描述 |
|---|---|
| EINVAL | 信号 值是非法信号编号,或者无法更改 信号 的缺省处理。 |