C语言: exit()函数与_exit()函数的区别

      C语言: exit()函数与_exit()函数的区别:
      exit()函数在调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件;
      _exit()直接使进程停止运行,清除其使用的内存空间,并销毁在内核中的各种数据结构。

      在Linux的标准函数库中,有一套称为“高级I/O”的函数,如printf、fopen、fread、fwrite,它们被称为“缓冲I/O(buffered I/O)”, 其特征是对应每一个找开的文件,在内存中都有一个缓冲区,每次读文件时,会先从文件中多读出若干条记录到缓冲区,这样下次读时就可以直接从内存的缓冲区中读取,每次写文件时,也是先入缓冲区,等满足一定的条件时(比如:达到一定数量,或遇到换行符'\n'和文件结束符EOF),再将缓冲区中的内容一次性写入文件,这样就可提高文件读写的速度。但请注意,如果有一些数据,我们认为已经写入了文件,但实际上因为没有满足特写的条件,它们还只是保存在缓冲区,这时如用_exit()函数直接关闭进程,缓冲区中的数据就会丢失。如想保证数据的完整性,一定要
用exit()函数。


下面程序是在Linux 2.6 下用gcc编译的

例子1:
#include <stdio.h>
main(){
printf("hello, world!\n");
exit(0);
printf("hello, sky~"); //不会显示
}
显示结果:hello, world!


例子2:
#include <stdio.h>
main(){
printf("hello, world!");
_exit(0);
printf("hello, sky~"); //不会显示
}
显示结果:什么也没有。

分析结果:
1. printf()函数在遇到换行符'\n'时才从缓冲区读取数据
2. 在例子1中exit(0)在使程序退出之前,先将缓冲区中的内容写到标准输出;(此处的标准输出是指屏幕)

3. 在例子2中_exit(0),直接将缓冲区里的内容清洗了。

总结《Linux C编程 从初学到精通》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值