您的位置:首页>频道 > 关注 >

看热讯:fwrite和fputs区别(fwrite)

2023-01-03 05:50:20    来源:关注网

大家好,小豆豆来为大家解答以上的问题。fwrite和fputs区别,fwrite这个很多人还不知道,现在让我们一起来看看吧!

1、首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。

2、系统内核对磁盘的读写都会提供一个块缓冲,当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。


(资料图片)

3、因此所谓的不带缓冲的I/O是指进程不提供缓冲功能。

4、每调用一次write或read函数,直接系统调用。

5、而带缓冲的I/O是指进程对输入输出流进行了改进,提供了一个流缓冲,当用fwrite函数网磁盘写数据时,先把数据写入流缓冲区中,当达到一定条件,比如流缓冲区满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲,再经块缓冲写入磁盘fwrite是带缓冲的,write不带缓冲。

6、举例说明如下:如果文件的大小是8k。

7、若用write,且只分配了2k的缓存,则要将此文件读入需要做4次系统调用。

8、若用fwrite,则系统自动分配缓存,则读入此文件只要一次系统调用。

9、也就是用write要读4次磁盘,而用fwrite则只要读1次磁盘。

10、所以fwrite的效率比write要高4倍。

11、另外,如果程序对内存有限制,则用write比较好。

12、系统调用write的效率取决于用户buff的大小和要写入的总数量,如果buff太小,进入内核空间的次数会增加,效率就低下。

13、而fwrite会自动完成缓存分配任务,减少了实际出现的系统调用,所以效率比较高。

14、1. 所谓缓冲区,就是一段内存。

15、里面存有内容。

16、fwrite有缓冲,代表当fwrite调用结束之后,它所要求写入文件的内容,可能还有一部分在内存当中,如果要确保写入,需要调用fflush。

17、2. read和write都对应于文件和内存,一个是把文件内容从内存写到文件,另一个是将文件内容读出放入内存。

18、关于为什么还有关于缓冲区,请看第一条。

本文到此分享完毕,希望对大家有所帮助。



关键词: 系统调用 达到一定 写入磁盘

相关阅读