exit()和_exit()区别
来源:互联网 发布:windows 2003 64 iso 编辑:程序博客网 时间:2024/05/01 06:47
在linux的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf 、fopen 、fread 、fwrite都在此列,他们也被称作缓冲I/O。其特征是对应每一个打开的文件,都存在一个缓冲区, 在内存中都有一片缓冲区,每次读文件会多读若干条记录,这样下次读文件时就可以直接从内存的缓存中取出,每次写文件时也仅仅是写入到内存的缓冲区,等待满足一定的条件(达到一定的数量,或者遇到特定字符,如换行和文件结束符EOF),再将缓冲区的内容一次性的写入文件,这样就大大增加了文件读写的速度,但也为我们编程带来了一点点麻烦,如果有些数据,我们认为已经写入了文件,实际上因为没有满足特定的条件,他们还只是保存在缓冲区内,这时我们用_exit函数直接将程序关闭,缓冲区中的数据就会丢失,反之,如果向保证数据的完整性,就一定要使用exit函数。
exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的"清理I/O缓冲"一项。
所需头文件: exit: #include<stdlib.h>
_exit: #include<unistd.h>
exit()和_exit()都用于正常终止一个函数。但_exit()直接是一个sys_exit系统调用,而exit()则通常是普通函数库中的一个函数。它会先执行一些清除操作,例如调用执行各终止处理函数、关闭所有标准IO等,然后调用sys_exit。比如:
int main()
{
printf("this is a test function!!!\n")
printf("test exit");
exit(0);
}
int main()
{
printf("this is a test function!!!\n")
printf("test exit");
_exit(0);
}
这两个程序,程序1输出的是两句话,而程序2只输出了一句话。原因就是因为最后一句话上没有加上特殊的字符,如换行和文件结束符,因为这个时候文件是存放在缓冲区的,这个例子中文件就是存放打开的显示设备的缓冲区中的,因为输出函数要写入,首先要进行系统调用,这个时候系统会打开显示设备的缓冲区,而exit的作用就是结束,清理,就是说先检查缓冲区,把没有写入的数据写入到文件,而_exit是立刻关闭文件,文件缓冲区的内容也就消失了,这个时候就不可能再输出到显示设备了。
- exit()和_exit()区别
- exit()和_exit()区别
- _exit和exit的区别
- _exit和exit的区别?
- _exit和exit的区别
- exit和_exit的区别
- _exit和exit的区别
- _exit和exit的区别
- _exit和exit的区别
- exit和_exit的区别
- exit()和_exit()的区别
- _exit和exit的区别
- _exit和exit的区别?
- exit()和_exit()的区别
- exit和_exit的区别
- _exit和exit的区别
- _exit和exit的区别
- _exit 和 exit的区别
- git暂存区和工作区详解
- struts2国际化标准配置
- matlab截取图像
- Xcode7下面用Unity3D的一些尴尬问题
- 程序员的十层楼
- exit()和_exit()区别
- codeforces 148D D. Bag of mice(概率dp)
- hihoCoder 1233 Boxes(2015 北京网赛 G)
- JAVA问题总结之24--HashMap键值对(key-value)的操作
- CentOs中Apache开启rewrite模块详解
- 深度学习Matlab工具箱代码注释——MnistTest.m
- DOTNET笔记_StringBuilder_List<T>_Array
- Android内存泄露
- 让fragmentTabhost这类固定的bar能够滑动起来