日期:2014-05-16  浏览次数:20667 次

linux exit和_exit函数的辨析
资料上讲,这俩函数的差别就是exit在退出时会启动清理I/O缓冲,而_exit不会,书上还有以下例子:
/*exit.c*/
#include<stdio.h>
#include<stdlib.h>
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<stdio.h>
#include<unistd.h>
{
  printf("Using exit...\n");
  printf("This is the content in buffer");
  _exit(0);
}
打印信息:Using _exit...
说明_exit无法输出缓冲区里的记录



我不怎么明白为什么先是打印语句,后是调用退出函数,却会先执行退出函数,还有就是哪块内容是缓冲区的啊?求详解
------解决方案--------------------
顺序应该是没错的,都是先执行打印语句,后调用退出函数,只是printf函数是带缓存的,而_exit在执行时不会对缓存做处理。 如果非要输出你可以试试fprintf。
可以查下这两个的区别 http://blog.csdn.net/rzphenix/archive/2008/10/09/3043964.aspx


------解决方案--------------------
这些应该都是和系统的缓存机制有关的,针对这个程序,每个printf里的内容都是一个缓存内容,当下一个来的时候,上一个就得到了处理,被输出到指定位置如终端里面,而且针对一般信息与出错信息等应该还可以设置不同的机制。
------解决方案--------------------
是标准IO库的缓冲区
像标准输出,也就是printf的输出对象,是行缓冲的
你的printf语句没有以\n结尾,此时数据并没有真正送到屏幕,而是在标准IO库自己的缓冲区中
调用exit的时候,会自动刷新这个缓冲区,从而显示在屏幕上
而调用_exit的时候,导致缓冲区中的数据丢失..