1 #include <unistd.h> 2 #define NONEXIT 34 3 int (*_atexitfns[NONEXIT])(void); 4 void exit(int status){ 5 int i, (*f)(void); 6 for(i = NONEXIT-1; i >= 0; i--) 7 if(_atexitfns[i]){ 8 f = _atexitfns[i]; 9 _atexitfns[i] = 0; /* self defense against bozos */ 10 (*f)(); 11 } 12 _exit(status); 13 } 14 atexit(int (*f)(void)) 15 { 16 int i; 17 for(i=0; i<NONEXIT; i++) 18 if(!_atexitfns[i]){ 19 _atexitfns[i] = f; 20 return(0); 21 } 22 return(1); 23 } 24