我正在try 用C语言发出和处理定制信号.不幸的是,我只取得了部分成功.
我试着效仿这个例子:https://www.techonthenet.com/c_language/standard_library_functions/signal_h/raise.php
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
sig_atomic_t signaled = 0;
#define TEST_SIGNAL_50 50
#define TEST_SIGNAL_51 51
#define TEST_SIGNAL_52 52
#define SIGUSR1 50
void sigHandler(int sig)
{
signaled = 1;
//Switch statement to handle all signals
switch(sig) {
case TEST_SIGNAL_50:
printf("Case 50 is Matched.\n");
break;
case TEST_SIGNAL_51:
printf("Case 51 is Matched.\n");
break;
case TEST_SIGNAL_52:
printf("Case 52 is Matched.\n");
break;
case SIGINT:
printf("SIGINT Case is Matched.\n");
break;
default: //Raised signal is not a match
printf("Raised signal %d is not a match.\n", sig);
break;
}
}
int main() {
printf("Hello, World! Test\n");
int raiseResult;
void (*prev_handler)(int);
//Register the signal handler
//prev_handler = signal(SIGINT, sigHandler); //This works
//prev_handler = signal(TEST_SIGNAL_50, sigHandler);
prev_handler = signal(SIGUSR1, sigHandler);
/* ... */
//raiseResult = raise(SIGINT); //This works
raiseResult = raise(SIGUSR1);
/* ... */
printf("raiseResult =%d.\n",raiseResult );
printf("signaled =%d.\n",signaled);
return 0;
}
最终目标是能够通过采取各种行动来处理不同的信号.但就目前而言,简单地点击Switch语句并获得相应的消息将是一种胜利.
我知道SIGINT
是一个实际的信号.因此,当我筹集SIGINT
的时候,sigHandler()
就会起作用.但除此之外,我就不走运了.我从signal()
得到的返回值是负值;这告诉我我的失败与signal()
有关.
有没有人知道我用signal()
做错了什么?