gpt4 book ai didi

c - 如何从 C 中的信号处理程序获取返回值?

转载 作者:行者123 更新时间:2023-11-30 16:51:33 25 4
gpt4 key购买 nike

我在 this 中读到了类似的问题链接,但它没有解决我的问题,所以对重复的问题表示歉意。

我有以下代码,在程序执行时基本上接收 Ctrl+C 和 Ctrl+Z,但我希望 2 个信号处理函数在从终端接收信号时返回 1。

该链接介绍了有关使用 typedef 的内容,并且对 C 来说相当陌生,我不知道如何在我的代码中实现它。

代码如下:

#include <stdio.h>
#include <signal.h>

/* Signal Handler for SIGINT */
void sigintHandler(int sig_num) {

signal(SIGINT, sigintHandler);
printf("\n Cannot be terminated using Ctrl+C \n");
fflush(stdout);
}

/* Signal Handler for SIGTSTP */
void sigtstpHandler(int sig_num) {
signal(SIGTSTP, sigtstpHandler);
printf("\tCtrl+z received\n");
fflush(stdout);
}

int main (void) {

signal(SIGINT, sigintHandler);
signal(SIGTSTP, sigtstpHandler);

while(1) {} //infinite loop.
return 0;
}

感谢您的时间/帮助。

编辑:我想要当前的 2 个信号处理函数

    void sigintHandler(int sig_num)
void sigtstpHandler(int sig_num)

返回 1 而不仅仅是 void。这样我就可以做类似的事情

int sigIntReturn = signal(SIGINT, sigintHandler);

在主函数中。

最佳答案

信号处理程序就像一个中断,不会返回给任何人。您发布的链接讨论的是设置信号处理程序时的返回值,而不是信号处理程序返回值(请注意,signal 只是设置信号处理程序)。

但是,您可以执行类似于以下操作的操作,以便在信号发生时从 main 返回。

volatile int g_flag = 0;
void sigintHandler(int sig_num) {

signal(SIGINT, sigintHandler);

/* Not safe to use these functions in a signal handler */
printf("\n Cannot be terminated using Ctrl+C \n");
fflush(stdout);
g_flag = 1;
}

int main (void) {

signal(SIGINT, sigintHandler);
signal(SIGTSTP, sigtstpHandler);

while(g_flag == 0) {} //infinite loop.
return g_flag;
}

请注意,这是 main 中的一个繁忙循环,不建议这样做。您可以使用诸如 eventfd 之类的东西来发出信号。

关于c - 如何从 C 中的信号处理程序获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41720087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com