Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der zuverlässigste Weg, Strg-C-Ereignisse in C zu verarbeiten?

Was ist der zuverlässigste Weg, Strg-C-Ereignisse in C zu verarbeiten?

Original
2024-11-15 17:26:03807Durchsuche

What's the most reliable way to handle Ctrl-C events in C  ?

Zuverlässige Strg-C-Verarbeitung in C

Frage:

Wie können wir elegant erfassen? ein Strg-C-Ereignis in C ?

Antwort:

Obwohl die Verwendung von Signalen ein gängiger Ansatz ist, ist sie bei verschiedenen Implementierungen nicht immer zuverlässig. Eine robustere Methode wird mit Sigaction empfohlen.

Hier ist der geänderte Code basierend auf Toms Beispiel:

#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void my_handler(int s) {
  printf("Caught signal %d\n", s);
  exit(1); // or perform other necessary actions
}

int main() {
  struct sigaction sigIntHandler;

  sigIntHandler.sa_handler = my_handler;
  sigemptyset(&sigIntHandler.sa_mask);
  sigIntHandler.sa_flags = 0;

  sigaction(SIGINT, &sigIntHandler, NULL);

  pause(); // block the main thread until a Ctrl-C signal is received

  return 0;
}

In diesem überarbeiteten Code verwenden wir Sigaction, um eine Signalhandlerfunktion, my_handler, zu registrieren. Diese Funktion wird ausgeführt, wenn ein Strg-C-Signal (SIGINT) empfangen wird. Durch den Einsatz von Sigaction erhalten wir mehr Kontrolle über die Signalverarbeitungsmechanismen und machen unsere Ereigniserfassung zuverlässiger.

Das obige ist der detaillierte Inhalt vonWas ist der zuverlässigste Weg, Strg-C-Ereignisse in C zu verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn