<signal.h><stdalign.h>
章节大纲
-
<signal.h>
– 信号处理(Signal Handling)C89 引入了类型
sig_atomic_t
。标准 C 保留了所有形如
SIG*
和SIG_*
的标识符名称(其中 * 表示以大写字母开头的剩余部分),用于定义其他类型的信号。
一个实现中可用的完整信号集合、各信号的语义及默认处理方式均为实现定义的。C++ 注意事项:对应的标准 C++ 头文件为
<csignal>
。
指定信号处理方式(Specify Signal Handling)
signal
函数如果无法执行所请求的操作,
signal
函数会返回SIG_ERR
。
在 C89 之前,signal
返回-1
,但不要直接判断返回值是否为-1
,应使用宏SIG_ERR
进行判断。使用
signal
时,务必检查其返回值,不要假设它一定成功执行了你的请求。通常,当某个信号被检测到并传递给处理函数后,下一次再触发该信号时将恢复为“默认”处理方式。
也就是说:如果你希望持续捕获该信号,必须在信号处理函数中再次调用signal
注册处理器。
(标准 C 要求这种行为,除了SIGILL
以外,是否自动重置由实现决定。)如果在处理函数内部调用
signal
返回SIG_ERR
,则此时errno
的值是不确定的。
在其他情况下,如果signal
返回SIG_ERR
,errno
将包含一个正值,其可能值为实现定义。程序启动期间,实现可以自由决定某些信号是否被忽略或由默认方式处理,即信号处理的初始状态是实现定义的。
标准 C 未规定当同一信号在上一次尚未处理完时再次发生时的行为。
<stdalign.h>
– 对齐(Alignment)该头文件由 C11 引入,用于提供对齐需求的支持。
C++ 注意事项:对应的标准 C++ 头文件为
<cstdalign>
。
但注意:C++17 中已弃用该头文件。