c - 注册一个函数处理程序

标签 c signals

当信号 sig 作为参数给出时,我不知道如何使用此赋值调用函数 func 的方法。

  void set_sig_handler(int sig,void (*func)(int)){

谢谢。

最佳答案

你可以使用sigaction() ,处理程序必须具有以下签名之一:

/* this one matches your function */
void (*sa_handler)(int);

/* use thhis one If SA_SIGINFO is specified */
void (*sa_sigaction)(int, siginfo_t *, void *);

例子:

#include <signal.h>
....
void set_sig_handler(int sig, void (*func)(int))
{
    struct sigaction act= {0};

    /* set signal handler */
    act.sa_handler = func;

    if (sigaction(sig, &act, NULL) < 0) {
        perror ("sigaction");
        return 1;
    }
}

关于c - 注册一个函数处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552642/

相关文章:

c - 当我循环传递结构时,如何检查结构是否包含任何数据?

c - 使用 "pushf"并弹出到 32 位寄存器是否会破坏堆栈?

c++ - 检查 BOOL 的值是否比更新它更有效?

使用 signal_connect 在 C 中更改 GTK 标签

c - ANSI C 中带有 PTHREADS 的执行程序池

c - 如何正确处理C中的信号

c - sigaction() 的使用

ios - 如何检测 ios 应用程序何时真正关闭

c++ - POSIX SIGBUS 的可能原因有哪些?

c - Linux C : upon receiving a signal, 是否可以知道发送者的PID?