这里来认识exit函数和 _exit接口 ,它们的作用是类似的,都是在调用后退出程序,可以在程序的任何地方调用。
1.接口与函数
exit函数和_exit接口,一个函数,一个接口。那么函数和接口有什么不同的吗?
- 系统调用接口:是操作系统提供的访问内核功能的接口。
- 库函数:程序员对操作系统提供的系统调用接口的封装。(因为程序员觉得接口还不够好用,就封装了接口,使得它们更好用)
我们可以这么理解:库函数 = 接口+其他的一些东西。
2.缓冲区
在进行exit和_exit的辨析前,需要了解一下什么是缓冲区,因为它们的不同之处就在于缓冲区。
缓冲区:数据在写入文件前,首先会放到缓冲区中,等到缓冲区满了之后,再一次性刷新缓冲区,把缓冲区的内容写入到文件中。
这样是为了减少IO次数,因为一次数据的写入就是一次IO操作。如果我们每次都直接把数据写入到文件,意味着每写入一次就要进行一次IO操作。但是如果将多个要写入的数据都先放到缓冲区,然后一次性将缓冲区数据写入到文件中,就相当于多条数据只进行了一次IO操作,这样无疑提升了效率。
比如常使用的printf函数,我们每次打印的如果数据比较少,就会先存放在缓冲区,等到缓冲区的内容足够多,才会一次性打印出来。
来看看下面两行代码,不同之处在于第二行代码后面有换行符’\n’,当添加了换行符意味着这一行代码会直接打印,而不是放到缓冲区。
printf("Hello");//数据先放在缓冲区,等到缓冲区满刷新
printf("Hello\n");//数据直接打印
3.exit 与 _exit
(1)_exit
void _exit(int status); 系统调用接口
作用:在程序的任何地方都可以调用,调用后退出程序。退出前不刷新缓冲区,而是直接退出并释放资源,因此缓冲区的那些数据并不会被输出。
(2)exit
void exit(int status); 库函数
作用:在程序的任何地方都可以调用,调用后退出程序。退出前刷新缓冲区,把缓冲区的数据都输出。