Esiste un modo per far eseguire una determinata parte di codice all'uscita del programma?? anche in caso viene interrotto bruscamente (Ctrl+C su linux)??
Ciao Dave88...
Esiste un modo per far eseguire una determinata parte di codice all'uscita del programma?? anche in caso viene interrotto bruscamente (Ctrl+C su linux)??
Ciao Dave88...
In win32 esiste la funzione atexit(), è inclusa nello standard ANSI C/C++, ma non so se in
sistemi unix-like è suportata.
codice:#include <stdio.h> #include <stdlib.h> void exit_fn1(void) { printf("Exit function #1 called\n"); } void exit_fn2(void) { printf("Exit function #2 called\n"); } int main(void) { /* post exit function #1 */ atexit(exit_fn1); /* post exit function #2 */ atexit(exit_fn2); return 0; }
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Ho appena provato il tuo metodo, ma putroppo non esegue le funzioni in caso di uscita inaspettata...poiche io per uscire da un ciclo (e dal programma) faccio Ctrl+C, mi servirebbe che eseguisse una funzione prima che chiudesse il programma...
A me (compilo in win32) così funziona :Originariamente inviato da dave88
Ho appena provato il tuo metodo, ma putroppo non esegue le funzioni in caso di uscita inaspettata...poiche io per uscire da un ciclo (e dal programma) faccio Ctrl+C, mi servirebbe che eseguisse una funzione prima che chiudesse il programma...
Notare la differenza premendo CTRL-z e premendo CTRL-c.codice:#include <stdlib.h> #include <stdio.h> void exit_func1() { printf("Exit1 function called\n\n"); } void exit_func2() { printf("Exit2 function called\n\n"); } int main() { char str[261]; atexit(exit_func1); atexit(exit_func2); fgets( str, 260, stdin ); return EXIT_SUCCESS; }
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
questo è in maniera molto semplificata il mio problema...a me non funzia su Unix...su win non saprei...
Codice PHP:
#include <stdio.h>
#include <stdlib.h>
void exit_fn1(void)
{
printf("Exit function #1 called\n");
}
void exit_fn2(void)
{
printf("Exit function #2 called\n");
}
int main(void)
{
atexit(exit_fn1);
atexit(exit_fn2);
while (true)
{
}
return 0;
}
Se sei su unix protresti provare ad intercettare il SIGINT tramite un gestore di segnali.
Prova a cercare qualcosa sulle funzioni signal, sigemptyset e sigaction.
Ciao
Come ha già detto fastcoder, puoi intercettare SIGINT:
codice:#include <stdio.h> #include <stdlib.h> #include <signal.h> void exit_fn1 (void) { printf("Exit function #1 called\n"); } void exit_fn2 (void) { printf("Exit function #2 called\n"); } void sig_handler (int num) { exit (1); } int main (void) { signal (SIGINT, sig_handler); atexit (exit_fn1); atexit (exit_fn2); while (1) { } return 0; }
Grazie di cuore fastcoder e Andbin, ha funzionato perfettamente, e giusto per chi avesse lo stesso problema in futuro, l'intercettazione del segnale, quindi l'ultimo codice postato da andbin, è portabile (Windows/Linux) senza nessuna modifica.
Grazie mille.
Ma adesso ho un problema, e qui si fa un po piu nello specifico...
ho una variabile, che ad ogni ciclo while viene incrementatata di 1...
vorrei che nel momento in cui si arresta il programma, mi venga stampata codesta variabile,quindi, come faccio a passarla alla funzione "exit_fn1" ? poiche, si aspetta un void, non posso passare argomenti...fatemi sapere.
Dichiarala fuori dal main ...