Linux多任务编程(四)---exit()函数及其基础实验
来源:互联网 发布:怎样企业网络个人投资 编辑:程序博客网 时间:2024/05/16 13:38
exit()和_exit()函数
函数说明
创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示:
从图1可以看出,_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;而exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程打开过哪些文件,把文件缓冲区中的内容写回文件,也就是图1中的“清理I/O缓冲”一项。
在Linux的标准函数库中,有一种被称作“缓冲I/O(buffered I/O)”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。
每次读文件时,会连续读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件时,也仅仅是写入内存中的缓冲区,等满足了一定的条件(如达到一定数量或遇到特定字符等,最典型的就是咱们的vim中使用的:w命令),再将缓冲区中的内容一次性写入文件。
这种技术大大增加了文件读写的速度,但也给咱们的编程带来了一些麻烦。比如有些数据你认为已经被写入到文件中,实际上因为没有满足特定的条件,它们还只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭掉,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,最好使用exit()函数。
函数语法
下表列出了exit()和_exit()函数的语法要点:
基础实验
以下两个基础实验1比较了exit()和_exit()函数的区别。由于 printf()函数使用的是缓冲I/O方式,该函数在遇到“\n”换行符时自动从缓冲区中将记录读出,以下两个基础实验就是利用这个性质来进行比较的。以下为实验1的代码:
执行结果如下图
从输出的结果可以看到,调用exit()函数时,缓冲区中的记录也能正常输出。
实验2的代码如下:
执行结果如下图:
从最后的结果可以看到,调用_exit()函数无法输出缓冲区中的记录。
如果在实验2中的代码中的 第二个代码加上回车符,那么结果会有不同了。自己试试哈!
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(四)---exit()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(五)---wait()、waitpid()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(二)---fork()函数及其基础实验
- Linux多任务编程(三)---exec函数族及其基础实验
- Linux多任务编程(七)---Linux守护进程及其基础实验
- Linux多任务编程(七)---Linux守护进程及其基础实验
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- linux系统编程之进程(四):进程退出exit,_exit区别即atexit函数
- 【Linux基础】exit和_exit函数说明
- Linux学习备忘005——Linux查看程序端口占用情况
- session和cookies的区别
- 软件包后缀 noarch
- 使用 AirPlay 发送图片
- Bitmap的回收
- Linux多任务编程(四)---exit()函数及其基础实验
- google地图中, 纬度坐标在方形地图上定位问题的一点研究
- Hdu 1968 Just a Hook
- web.xml文件中<mime-mapping>
- Xshell 双击鼠标左键 换行的问题
- python 异常处理
- OpenGL 颜色混合函数 glBlendFunc() 及cocos2d中的战争迷雾效果
- 从eclipse中直接下载工程
- 如何开发一个 AVPlayer iPad 程序