章节大纲

  • <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_ERRerrno 将包含一个正值,其可能值为实现定义

    程序启动期间,实现可以自由决定某些信号是否被忽略或由默认方式处理,即信号处理的初始状态是实现定义的

    标准 C 未规定同一信号在上一次尚未处理完时再次发生时的行为。


    <stdalign.h> – 对齐(Alignment)

    该头文件由 C11 引入,用于提供对齐需求的支持。

    C++ 注意事项:对应的标准 C++ 头文件为 <cstdalign>
    但注意:C++17 中已弃用该头文件