找回密码
 注册
关于网站域名变更的通知
查看: 391|回复: 1
打印 上一主题 下一主题

Linux多任务编程(四) ------- 学习exit()函数及其基础实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-29 10:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
exit()和_exit()函数, K% n$ m; N& Z7 ?2 M

9 q8 `- S) d4 s( \函数说明
7 |2 x0 a- c7 {" E! J' v4 e4 V- Z! c1 h4 n5 `
   创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示:
/ {" a( Q! e4 `2 V- c. t7 i0 D
0 W3 i! X& ^: _3 [, v: m      

4 T! \9 K5 N' K# O  S0 Z0 `& u. u) t7 M
   从图1可以看出,_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;而exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程打开过哪些文件,把文件缓冲区中的内容写回文件,也就是图1中的“清理I/O缓冲”一项。
6 k. a2 C) {! C5 ]/ D8 T0 Y$ Z) n$ V( b( p! O* ?$ m3 d8 R* q5 v
  在Linux的标准函数库中,有一种被称作“缓冲I/O(buffered I/O)”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。
( U$ ~# C" u; p; }. T, j3 x7 ?% Z5 Y: Y5 [$ C: w1 B/ c
  每次读文件时,会连续读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件时,也仅仅是写入内存中的缓冲区,等满足了一定的条件(如达到一定数量或遇到特定字符等,最典型的就是咱们的vim中使用的:w命令),再将缓冲区中的内容一次性写入文件。
  A5 I0 f4 x2 Q& c, _/ K
, _, V) _* A7 S4 Q" S4 M# Z2 [( L   这种技术大大增加了文件读写的速度,但也给咱们的编程带来了一些麻烦。比如有些数据你认为已经被写入到文件中,实际上因为没有满足特定的条件,它们还只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭掉,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,最好使用exit()函数。
9 P$ w' l  N1 h' J( O2 ]8 P) m( I- q# o8 i7 `. U, ]0 V, K/ T: h
函数语法
- @  z7 @( \9 a0 D1 \# d' G

& T% J2 s5 n% g" f9 ~4 [   下表列出了exit()和_exit()函数的语法要点:, j6 s8 L1 c3 C6 M
0 c+ u* \* q, k* ^; J; u4 g
游客,如果您要查看本帖隐藏内容请回复

' a+ J: e3 z+ V' C4 b. t8 _9 m2 _* Y' z( Q% C. T, z

该用户从未签到

2#
发表于 2019-9-29 19:10 | 只看该作者
研究研究,谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:37 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表