有没有办法将 sigaction() 发送到具有多个参数的信号处理程序?

发布于 12-11 13:16 字数 486 浏览 0 评论 0原文

每次收到 SIGINT 时,我都会使用 sigaction() 执行操作。我见过的所有教程都使用这个原型作为信号处理程序

void sig_handler(int sig);

是否有一种方法可以使其接受更多参数,从而满足我的需求?例如

void sig_handler(char* surname, int age);

这是我的代码:

void sig_handler(int sig) {
    printf("SIGINT(%d) received\n", sig);
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

I am using sigaction() to perform an action every time SIGINT is received. All tutorials I have seen use this prototype as a signal handler

void sig_handler(int sig);

Is there a way somehow to make this to take more parameters so it suits my needs? So for example

void sig_handler(char* surname, int age);

This is my code:

void sig_handler(int sig) {
    printf("SIGINT(%d) received\n", sig);
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲性难收2024-12-18 13:16:14

不直接,但您可以设置一个全局变量来告诉您的 sig_handler() 做什么。

int ACTION = 0;

void sig_handler(int sig) {
    if (sig == SIGINT) {
        switch (ACTION) {
          case 0: other_function(char* surname, int age);
          break;
        // more cases
        default:
          ;
        }
    } else if ( ....  // more signals
    }
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}

Not directly, but you could set a global variable that tells your sig_handler() what to do.

int ACTION = 0;

void sig_handler(int sig) {
    if (sig == SIGINT) {
        switch (ACTION) {
          case 0: other_function(char* surname, int age);
          break;
        // more cases
        default:
          ;
        }
    } else if ( ....  // more signals
    }
}

int main( ){
    struct sigaction act;
    act.sa_handler=sig_handler;

    sigaction(SIGINT, &act, NULL);

    while(1){};
    return 0 ;
}
乄_柒ぐ汐2024-12-18 13:16:14

你不能用信号来做到这一点。如何提供和传递这些参数?信号只是一个预定义的数字代码,它导致进程通过中断主流程来异步执行处理程序。

但是,您可以为此使用 Unix 套接字、管道或 fifo 文件。

You can't do this with signals. How would these parameters be supplied and delivered? A signal is just a predefined numeric code that causes the process to execute the handler asynchronously, by interrupting the main flow.

You can, however, use a Unix socket, a pipe, or a fifo file for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文