在主函数的最开始会初始化一个全部变量 g_i4event 为 0。 本关的编程任务是补全右侧代码片段中两段Begin至End中间的代码,具体要求如下: 在 do _signal中分别为信号 SIGUSR1 、 SIGUSR2 注册信号处理函数 funcA 和 funcB ,而后将 g_i4event 置为 1; 完成两个信号处理函数,其中 funcA 中将 g_i4event 置为 2, funcB 中将 g_i4event 为 3。#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> int g_i4event; typedef void (*sighandler_t)(int); /********Begin********/ /*实现funcA和funcB*/ /*********End*********/ int do_signal(void) { /********Begin********/ /*********End*********/ }
时间: 2023-08-22 07:04:54 浏览: 511
下面是代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
int g_i4event;
typedef void (*sighandler_t)(int);
void funcA(int signum) {
g_i4event = 2;
}
void funcB(int signum) {
g_i4event = 3;
}
int do_signal(void) {
signal(SIGUSR1, funcA);
signal(SIGUSR2, funcB);
g_i4event = 1;
}
需要注意的是,信号处理函数要求是 void 类型,参数是 int 类型的信号编号。在这个问题中,我们需要实现两个信号处理函数 funcA 和 funcB,并在函数 do_signal 中分别为 SIGUSR1 和 SIGUSR2 注册这两个信号处理函数,同时将 g_i4event 置为 1。
阅读全文