Я пытаюсь создать обработчик для сигнала выхода в c, и моя операционная система - Ubuntu.
Я использую метод sigaction для регистрации моего пользовательского метода обработчика.
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
Вот мой код
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void CustomHandler(int signo)
{
printf("Inside custom handler");
switch(signo)
{
case SIGFPE:
printf("ERROR: Illegal arithmatic operation.\n");
break;
}
exit(signo);
}
void newCustomHandler(int signo)
{
printf("Inside new custom handler");
switch(signo)
{
case SIGINT:
printf("ERROR: Illegal arithmatic operation.\n");
break;
}
exit(signo);
}
int main(void)
{
long value;
int i;
struct sigaction act = {CustomHandler};
struct sigaction newact = {newCustomHandler};
newact = act;
sigaction(SIGINT, &newact, NULL); //whats the difference between this
/*sigaction(SIGINT, &act, NULL); // and this?
sigaction(SIGINT, NULL, &newact);*/
for(i = 0; i < 5; i++)
{
printf("Value: ");
scanf("%ld", &value);
printf("Result = %ld\n", 2520 / value);
}
}
Теперь, когда я запускаю программу и нажимаю Ctrl + c, она отображает пользовательский обработчик Inside Inside.
Я прочитал документацию для sigaction и там написано
Если действие не равно нулю, новое действие для
Сигнал Signum устанавливается из акта.
Если oldact не равен NULL, предыдущий
действие сохраняется в oldact.
зачем мне передавать вторую структуру, когда я могу напрямую присваивать значения типа
newact = act
Спасибо.