Come posso prendere un evento ctrl-c? (C ++)

Come posso catturare un evento Ctrl + C in C ++?

signal non è il modo più affidabile in quanto differisce nelle implementazioni. Consiglierei l’uso di sigaction . Il codice di Tom ora sarebbe simile a questo:

 #include  #include  #include  #include  void my_handler(int s){ printf("Caught signal %d\n",s); exit(1); } int main(int argc,char** argv) { struct sigaction sigIntHandler; sigIntHandler.sa_handler = my_handler; sigemptyset(&sigIntHandler.sa_mask); sigIntHandler.sa_flags = 0; sigaction(SIGINT, &sigIntHandler, NULL); pause(); return 0; } 

Per un’app per console di Windows, si desidera utilizzare SetConsoleCtrlHandler per gestire CTRL + C e CTRL + INTERR .

Vedi qui per un esempio.

Devi prendere il segnale SIGINT (stiamo parlando di POSIX giusto?)

Vedi la risposta di @Gab Royer per la sigaction.

Esempio:

 #include  #include  #include  void my_handler(sig_t s){ printf("Caught signal %d\n",s); exit(1); } int main(int argc,char** argv) { signal (SIGINT,my_handler); while(1); return 0; } 

Sì, questa è una domanda dipendente dalla piattaforma.

Se stai scrivendo un programma console su POSIX, usa l’API del segnale (#include ).

In un’applicazione GUI WIN32 è necessario gestire il messaggio WM_KEYDOWN.