Я пытаюсь изменить следующий код, чтобы использовать sigaction() для перехвата SIGINT;Как использовать sigaction() для перехвата SIGINT?
мне нужно заменить "для" петли с «в то время как (1), вы должны быть в состоянии выйти из программы, введя " (. Нужно перехватить SIGQUIT)^\"
#include <signal.h>
#include <unistd.h>
#include <iostream>
using namespace std;
void func (int sig)
{
cout << "Oops! -- I got a signal " << sig << endl;
}
int main()
{
(void) signal (SIGINT, func); //catch terminal interrupts
//for (int i = 0; i < 20; ++i)
while(1)
{
cout << "signals" << endl;
sleep (1);
}
return 0;
}
SIGINT или SIGQUIT? Который из них? –
Вам нужно настроить переменную 'struct sigaction' с правильной информацией. Затем вы вызываете 'sigaction()' вместо 'signal()'. Большая часть остального остается неизменной. Обратите внимание, что вызов 'cout << ...' в обработчике сигналов, скорее всего, будет «неопределенным поведением». См. [Как избежать использования 'printf()' в обработчике сигналов] (http://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler/). Это строго для C, но аналогичные понятия применимы и к C++. –