标准IO与文件IO

文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作。上一节说到,文件I/O是采用直接系统调用的方式,因此当使用这些接口对文件进行操作时,就会立刻触发系统调用过程,即向系统内核发出请求之后,系统内核会收到请求执行相关的代码处理请求,决定是否将操作硬件资源或返回结果给应用程序。
标准I/O虽然也是使用一系列函数接口对文件进行读写操作,但是函数出自于C库。因此封装了比底层系统调用更多的调用函数接口。其次,最重要的一点,是与文件I/O的本质区别,就在于标准I/O函数接口在对文件进行操作时,首先先操作缓存区,等到缓存区满足一定的条件时,然后再去执行系统调用,真正实现对文件的操作。而文件I/O不操作任何缓存区,直接系统调用,对文件进行操作,如下图2.3所示,可直观的看出二者的区别。
在这里插入图片描述

图2.3 文件I/O与标准I/O
使用标准I/O可以减少系统调用的次数,提高系统效率。例如,将数据写入到文件中,每次写入一个字符。采用文件I/O的函数接口,每调用一次函数写入字符就会产生一次系统调用,而执行系统调用时,Linux必须从用户态切换到内核态,处理相应的请求,然后再返回到用户态,如果频繁地执行系统调用会增加系统的开销。而采用标准I/O的函数接口,每调用一次函数写入字符,并不着急将字符写入文件,而是放到缓存区保存,之后每一次写入字符都放到缓存区保存。直到缓存区满足刷新的条件时,比如写满时,就一并将缓存区中的数据写入到文件,执行一次系统调用完成此过程,这样便很大程度地减少了系统调用的次数,提高了执行效率。

猜你喜欢

转载自blog.csdn.net/anton_99/article/details/99229919