简要对比C语言中三个用于退出进程的函数
C语言_exit()函数:结束进程执行
头文件:
#include<unistd.h>
定义函数:
void_exit(intstatus);
函数说明:_exit()用来立刻结束目前进程的执行,并把参数status返回给父进程,并关闭未关闭的文件.此函数调用后不会返回,并且会传递SIGCHLD信号给父进程,父进程可以由wait函数取得子进程结束状态.
附加说明:_exit()不会处理标准I/O缓冲区,如要更新缓冲区请使用exit().
C语言on_exit()函数:设置程序正常结束前调用的函数
头文件:
#include<stdlib.h>
定义函数:
inton_exit(void(*function)(intvoid*),void*arg);
函数说明:on_exit()用来设置一个程序正常结束前调用的函数.当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序.参数arg指针会传给参数function函数,详细情况请见范例.
返回值:如果执行成功则返回0,否则返回-1,失败原因存于errno中.
范例
#include<stdlib.h> voidmy_exit(intstatus,void*arg) { printf("beforeexit()!\n"); printf("exit(%d)\n",status); printf("arg=%s\n",(char*)arg); } main() { char*str="test"; on_exit(my_exit,(void*)str); exit(1234); }
执行:
beforeexit()!exit(1234)arg=test
C语言atexit()函数:设置程序正常结束前调用的函数
头文件:
#include<stdlib.h>
定义函数:
intatexit(void(*function)(void));
函数说明:atexit()用来设置一个程序正常结束前调用的函数.当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序.
返回值:如果执行成功则返回0,否则返回-1,失败原因存于errno中.
范例
#include<stdlib.h> voidmy_exit(void) { printf("beforeexit()!\n"); } main() { atexit(my_exit); exit(0); }
执行:
beforeexit()!