函数声明:
#include <stdlib.h>
void exit(int status);
void _Exit(int status);//等同于_exit
#include <unistd.h>
void _exit(int status);
eixt和_exit的比较:
exit:
1.退出程序;
2.处理所有I/O缓冲区,然后关闭文件;
3.调用atexit、on_exit注册的函数。
_exit:
1.退出程序;
2.关闭文件,但不处理I/O缓冲区;
3.不调用任何注册的函数。
PS:
#include <stdlib.h>
int atexit(void (*func)(void));//入栈func函数,程序正常结束后出栈执行,即main执行结束后调用的函数
int on_exit(void (*func)(int , void *), void *arg);//设置一个程序正常结束前调用的函数
例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void func1()
{
printf("func1 called\n");
}
void func2()
{
printf("func2 called\n");
}
void func3(int x, void *arg)
{
printf("func 3 called, x = %d, arg = %d\n",x,(int)arg);
}
int main()
{
atexit(func1);
atexit(func2);
on_exit(func3,10);
printf("main end \n");
printf("linux"); //不要加回车
exit(100);
}
out:
main endlinuxfunc 3 called, x = 100, arg = 10
func2 called
func1 called
改为_exit后只显示:main end