EDA365电子论坛网
标题:
Linux多任务编程(四) ------- 学习exit()函数及其基础实验
[打印本页]
作者:
thinkfunny
时间:
2019-9-29 10:05
标题:
Linux多任务编程(四) ------- 学习exit()函数及其基础实验
exit()和_exit()函数
6 S* V' R, L4 y, Y* V: ` K
' W* m3 R& M( b, t& X m
函数说明
% x' g* p5 z5 f, R
1 M& X: D5 Q& j1 `
创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示:
& Z4 I2 C, I9 ?4 J" D
- q! J# e* T4 |( Z# { V) y
Linux多任务编程(四)-6.png
(58.59 KB, 下载次数: 1)
下载附件
保存到相册
2019-9-29 10:04 上传
$ R2 S5 y8 n- R7 L/ g0 x
3 V7 f' w3 S0 g
从图1可以看出,_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;而exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程打开过哪些文件,把文件缓冲区中的内容写回文件,也就是图1中的“清理I/O缓冲”一项。
2 H7 a. Q" j% e3 g- G, H \
* q" S, Z6 X! m' U
在Linux的标准函数库中,有一种被称作“缓冲I/O(buffered I/O)”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。
8 m* F5 ~/ l$ v6 i4 m: N. a0 ?
5 ~5 q' M+ b7 C2 P
每次读文件时,会连续读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件时,也仅仅是写入内存中的缓冲区,等满足了一定的条件(如达到一定数量或遇到特定字符等,最典型的就是咱们的vim中使用的:w命令),再将缓冲区中的内容一次性写入文件。
7 ? ~, G! J) Z0 ], m8 I
S9 k h- E2 }" \* B5 n/ C0 l) b1 D
这种技术大大增加了文件读写的速度,但也给咱们的编程带来了一些麻烦。比如有些数据你认为已经被写入到文件中,实际上因为没有满足特定的条件,它们还只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭掉,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,最好使用exit()函数。
( A) ]4 f1 l& |; J {
7 q- j( f1 a( ~; ~# x: G0 w
函数语法
, e% r' G6 L/ {' F2 C) W
) d/ @+ U8 g" e3 K/ J; }: |* a& @
下表列出了exit()和_exit()函数的语法要点:
u# m( T' `5 a$ G9 D% P1 V# A
- a8 g8 [- p, V+ G+ R! v; u3 F
& O* i# z8 O+ z/ |9 X
! U) `, ^8 B6 m8 [1 U, Q; R
作者:
wu68aq
时间:
2019-9-29 19:10
研究研究,谢谢分享。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2