Ich versuche, den folgenden Code zu ändern, um mit sigaction() SIGINT abzufangen;Wie kann ich mit sigaction() SIGINT abfangen?
Ich brauche die „für“ Schleife ersetzen mit „while (1), sollten Sie durch Eingabe das Programm beenden können,‚ (. Sie benötigen SIGQUIT abzufangen)^\‘
#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 oder SIGQUIT? Welches ist es? –
Sie müssen die Variable 'struct sigaction' mit den korrekten Informationen einrichten. Sie rufen dann 'sigaction()' anstelle von 'signal()' auf. Der größte Teil bleibt unverändert. Beachten Sie, dass das Aufrufen von 'cout << ...' in einem Signal-Handler sehr wahrscheinlich ein 'undefiniertes Verhalten' ist. Siehe [Vermeidung von 'printf()' in einem Signalhandler] (http://stackoverflow.com/questions/16891019/how-to-avoid-using-printf-in-a-signal-handler/). Es ist ausschließlich für C, aber ähnliche Konzepte gelten auch für C++. –