在主函数的最开始会初始化一个全部变量 g_i4event 为 0。 本关的编程任务是补全右侧代码片段中两段Begin至End中间的代码,具体要求如下: 在 do _signal中分别为信号 SIGUSR1 、 SIGUSR2 注册信号处理函数 funcA 和 funcB ,而后将 g_i4event 置为 1; 完成两个信号处理函数,其中 funcA 中将 g_i4event 置为 2, funcB 中将 g_i4event 为 3。
时间: 2024-02-18 12:01:58 浏览: 164
下面是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
volatile int g_i4event = 0;
void funcA(int signo)
{
g_i4event = 2;
}
void funcB(int signo)
{
g_i4event = 3;
}
int main(int argc, char *argv[])
{
signal(SIGUSR1, funcA); // 为 SIGUSR1 注册信号处理函数 funcA
signal(SIGUSR2, funcB); // 为 SIGUSR2 注册信号处理函数 funcB
g_i4event = 1;
// 以下是测试代码
raise(SIGUSR1);
raise(SIGUSR2);
if (g_i4event == 2) {
printf("funcA is executed.\n");
} else if (g_i4event == 3) {
printf("funcB is executed.\n");
}
return 0;
}
```
在上述代码中,我们使用 signal 函数为 SIGUSR1 和 SIGUSR2 分别注册了信号处理函数 funcA 和 funcB。在 main 函数中,我们将 g_i4event 初始化为 1,并通过调用 raise 函数来模拟收到信号的情况,从而触发信号处理函数的执行。在信号处理函数中,我们将 g_i4event 分别设置为 2 和 3,以便在主函数中进行判断。最终输出的结果应该是 funcA is executed.
阅读全文