Chinaunix首页 | 论坛 | 博客
  • 博客访问: 661969
  • 博文数量: 81
  • 博客积分: 1659
  • 博客等级: 上尉
  • 技术积分: 1286
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-02 16:36
个人简介

专注于嵌入式和图像处理

文章分类

全部博文(81)

文章存档

2014年(1)

2013年(7)

2012年(46)

2011年(27)

分类: C/C++

2012-02-23 20:28:50

exit函数(3)

#include

void exit(int status);

void _Exit(int status);

#include

void _exit(int status);

_Exit()_exit()立即进入内核,exit则先进行一些清理处理(包括调用执行各终止处理程序,关闭所有标准I/O流等),然后进入内核。

Linux的标准函数库中,有一套称作"高级I/O"的函数,我们熟知的printf()fopen()fread()fwrite()都在此列,它们也被称作"缓冲I/Obuffered I/O",其特征是对应每一个打开的文件,在内存中都有一片缓冲区,每次读文件时,会多读出若干条记录,这样下次读文件时就可以直接从内存的缓冲区中读取,每次写文件的时候,也仅仅是写入内存中的缓冲区,等满足了一定的条件(达到一定数量,或遇到特定字符,如换行符和文件结束符EOF),再将缓冲区中的内容一次性写入文件,这样就大大增加了文件读写的速度,但也为我们编程带来了一点点麻烦。如果有一些数据,我们认为已经写入了文件,实际上因为没有满足特定的条件,它们还只是保存在缓冲区内,这时我们用_exit()函数直接将进程关闭,缓冲区中的数据就会丢失,反之,如果想保证数据的完整性,就一定要使用exit()函数。

看下面代码:

#include
#include
#include

int main(void)
{
 printf("output begin:\n");
 printf("afdadfads");
 exit(0);
}
$./a.out

output begin:

afdadfads

再看:

#include
#include

int main(void)
{
 printf("output begin:\n");
 printf("afdadfads");
 _exit(0);
}
$./a.out

output begin:

如果把printf("output begin:\n")的\n去掉,将什么都不输出。

 

阅读(2274) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~