当前位置: 技术问答>linux和unix
linux exit和_exit函数的辨析
来源: 互联网 发布时间:2017-02-15
本文导语: 资料上讲,这俩函数的差别就是exit在退出时会启动清理I/O缓冲,而_exit不会,书上还有以下例子: /*exit.c*/ #include #include int main() { printf("Using exit...n"); printf("This is the content in buffer"); exit(0); } 打印信息: ...
资料上讲,这俩函数的差别就是exit在退出时会启动清理I/O缓冲,而_exit不会,书上还有以下例子:
/*exit.c*/
#include
#include
int main()
{
printf("Using exit...n");
printf("This is the content in buffer");
exit(0);
}
打印信息:
Using exit...
This is the content in buffer
说明缓冲区里的内容能正常输出
/*_exit.c*/
#include
#include
{
printf("Using exit...n");
printf("This is the content in buffer");
_exit(0);
}
打印信息:Using _exit...
说明_exit无法输出缓冲区里的记录
我不怎么明白为什么先是打印语句,后是调用退出函数,却会先执行退出函数,还有就是哪块内容是缓冲区的啊?求详解
/*exit.c*/
#include
#include
int main()
{
printf("Using exit...n");
printf("This is the content in buffer");
exit(0);
}
打印信息:
Using exit...
This is the content in buffer
说明缓冲区里的内容能正常输出
/*_exit.c*/
#include
#include
{
printf("Using exit...n");
printf("This is the content in buffer");
_exit(0);
}
打印信息:Using _exit...
说明_exit无法输出缓冲区里的记录
我不怎么明白为什么先是打印语句,后是调用退出函数,却会先执行退出函数,还有就是哪块内容是缓冲区的啊?求详解
|
是标准IO库的缓冲区
像标准输出,也就是printf的输出对象,是行缓冲的
你的printf语句没有以n结尾,此时数据并没有真正送到屏幕,而是在标准IO库自己的缓冲区中
调用exit的时候,会自动刷新这个缓冲区,从而显示在屏幕上
而调用_exit的时候,导致缓冲区中的数据丢失..
像标准输出,也就是printf的输出对象,是行缓冲的
你的printf语句没有以n结尾,此时数据并没有真正送到屏幕,而是在标准IO库自己的缓冲区中
调用exit的时候,会自动刷新这个缓冲区,从而显示在屏幕上
而调用_exit的时候,导致缓冲区中的数据丢失..
|
顺序应该是没错的,都是先执行打印语句,后调用退出函数,只是printf函数是带缓存的,而_exit在执行时不会对缓存做处理。 如果非要输出你可以试试fprintf。
可以查下这两个的区别 http://blog.csdn.net/rzphenix/archive/2008/10/09/3043964.aspx
可以查下这两个的区别 http://blog.csdn.net/rzphenix/archive/2008/10/09/3043964.aspx
|
这些应该都是和系统的缓存机制有关的,针对这个程序,每个printf里的内容都是一个缓存内容,当下一个来的时候,上一个就得到了处理,被输出到指定位置如终端里面,而且针对一般信息与出错信息等应该还可以设置不同的机制。