/* Clean up after a ^C */ #include #include char tempfilename[] = "/tmp/testXXXX"; char rmcmd[] = "/usr/bin/rm /tmp/testXXXX"; /* Alternate if all that is required is a rm, is to unlink file after open */ extern void sig_int(int signo); void fatal(void) { /* signal error */ exit(21); } int main() { sigset_t sset; struct sigaction act; FILE *fp1, *fp2; sigemptyset(&sset); act.sa_handler = sig_int; act.sa_mask = sset; act.sa_flags = 0; if (-1 == sigaction(SIGINT,&act,NULL)) fatal(); /* install signal action */ if (-1 == sigaction(SIGKILL,&act,NULL)) fatal(); fp1 = tmpfile(); /* file will be removed automatically on exit */ fp2 = fopen(tempfilename,"w"); /* file needs to be removed by handler */ fprintf(fp1,"Stuff\n"); fprintf(fp2,"Stuff\n"); system("ls -l /tmp/test*"); printf("You could test handler by pressing ^C\n"); sleep(5); printf("Bye - you never pressed ^C\n"); fclose(fp2); system(rmcmd); return 0; } void sig_int(int signo) { system(rmcmd); exit(1); }