转:
http://blog.sina.com.cn/s/blog_5cec5bad0100b0x2.html
http://blog.csdn.net/iefswang/article/details/7430775
http://blog.sina.com.cn/s/blog_605f5b4f0100x3v0.html
http://baike.baidu.com/view/653930.htm
exit,
abort:
atexit:
其参数是要调用的函数地址。参数函数是一个无参数无返回值的函数。atexit可以登记32个函数,这些函数由
exit
_exit
_Exit
exit和_exit函数
exit和_exit函数用于正常终止一个程序:
#include
void
#include
void
使用不同头文件的原因是:exit是由ANSI
由于历史原因,
注意,内核使程序执行的唯一方法是调用一个exec函数。进程自愿终止的唯一方法是显式或隐式地(调用e
return与exit的区别
在进程操作中exit是结束当前进程或程序并把控制权返回给调用该程序或者进程的进程即父进程并告诉父进程该当前进程的运行状态,而return是从当前函数返回,如果是在main函数中,main函数结束时隐式地调用exit函数,自然也就结束了当前进程。
return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。
在main函数里面return(0)和exit(0)是一样的,子函数用return返回;而子进程用exit退出,调用exit时要调用一段终止处理程序,然后关闭所有I/O流。
atexit
功 能: 注册终止函数(即main执行结束后调用的函数)
exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
下面是一段代码示例:
#include <stdlib.h> // 使用atexit()函数所必须包含的头文件stdlib.h
#include <iostream.h>
void terminateTest()
{
}
int main(void)
{
}
程序的运行结果为:
the end of main()
程序正在结束...
这些函数都是在main结束以后才被调用的。atexit只是注册他们,使得他们在main结束以后被调用,看名字就可以看出来。
atexit这个玩意超有用,可以按照你予设的顺序摧毁全局变量(类),例如有个log类,你在其它的全局类里也有可能调用到Log类写日志。所以log类必须最后被析构 。假如没有规定析构顺序,那么程序在退出时将有可能首先析构log类,那么其它的全局类在此时将无法正确写日志。
把数据写回文件, 删除临时文件, 这才是真正有用的.