1 #include <unistd.h> 2 #define NONEXIT 34 3 int (*_atexitfns[NONEXIT])(void); 4 void _doatexits(void){ 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 } 13 void exit(int status) 14 { 15 _doatexits(); 16 _exit(status); 17 } 18 atexit(int (*f)(void)) 19 { 20 int i; 21 for(i=0; i<NONEXIT; i++) 22 if(!_atexitfns[i]){ 23 _atexitfns[i] = f; 24 return(0); 25 } 26 return(1); 27 } 28