/* Clean up after a ^C  */

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

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); 
   }

