当咱们在linux系统下写程序的时候,常常会读文件或者写文件,既然要操做文件,就会用文件操做函数,其中涉及读写的不乏有read/write或者fread/fwrite,可是咱们应该选择哪种呢,少安毋躁,在决定选用哪种以前,先让咱们看看它们有哪些不一样点,而后再作决定,你说呢?linux
1、 fread和read的不一样点shell
1)缓存
read/write 操做文件描述符 (int型)
fread/fwrite 操做文件流 (FILE*型)函数
2)
fread/fwrite 调用 read/write
read/write是系统调用,要本身分配缓存,也就是说效率要本身根据实际状况来控制。
fread/fwrite是标准输入/输出函数,不须要本身分配缓存,对于通常状况具备较高的效率。blog
2、 实例分析:
2.1 待测文件,大小是8K,如图1 。
图1内存
说明:待测文件能够用shell脚本分享自动生成,或者手动编辑一个,最好是尝试用前者。it
2.2 用read读取待测文件test.txt编译
经过分析计算,若是用read读待测文件,且只分配2K的缓存,则要将此文件读出须要作4次系统调用来实际从磁盘上读出。test
好的,接下来咱们经过实例来验证,验证程序代码如图2
图2效率
编译运行,经过结果验证,如图三、图四、图五、图6
图3
图4
图5
图6
说明:上面的输出结果,是预先在验证程序里写好的。
用strace命令跟踪验证以下:
图7
图8
图9
图10
2.3 用fread读取待测文件test.txt
若是用fread/fwrite,则系统自动分配缓存(通常大于8K),则读出此文件只要一次系统调用从磁盘上读出。也就是用read/write要读4次磁盘,而用fread/fwrite则只要读1次磁盘。效率比read/write要高4倍。若是程序对内存有限制,则用read/write比较好。
验证程序代码如图11
图11
编译运行结果如图12,验证结果
图12
用strace命令跟踪验证如图13
图13
以上即为今天对这两种读文件方式的实例分析,接下来我会继续作写文件的分析。