Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1354843
  • 博文数量: 166
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 4061
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-11 13:45
个人简介

现任职北京某互联网公司运维经理,高级架构师,涉足互联网运维行业已经超过10年。曾服务于京东商城,互动百科等互联网公司,早期运维界新星。 长期专研,C语言开发,操作系统内核,大型互联网架构。http://www.bdkyr.com

文章分类

分类: LINUX

2013-10-10 20:38:59

当我们在linux系统下写程序的时候,经常会读文件或者写文件,既然要操作文件,就会用文件操作函数,其中涉及读写的不乏有read/write或者fread/fwrite,但是我们应该选择哪一种呢,少安毋躁,在决定选用哪一种之前,先让我们看看它们有哪些不同点,然后再做决定,你说呢?

一、  freadread的不同点

1

read/write  操作文件描述符 (int)
fread/fwrite 
操作文件流   (FILE*)

2
fread/fwrite 
调用 read/write
read/write是系统调用,要自己分配缓存,也就是说效率要自己根据实际情况来控制。
fread/fwrite是标准输入/输出函数,不需要自己分配缓存,对于一般情况具有较高的效率。

 

 

二、   实例分析:
2.1 
待测文件,大小是8K,如图1
                    
                                                     图1

说明:待测文件可以用自动生成,或者手动编辑一个,最好是尝试用前者。

 

2.2   read读取待测文件test.txt

通过分析计算,如果用read读待测文件,且只分配2K的缓存,则要将此文件读出需要做4次系统调用来实际从磁盘上读出。

好的,接下来我们通过实例来验证,验证程序代码如图2
                                                                               图2

编译运行,通过结果验证,如图3、图4、图5、图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

以上即为今天对这两种读文件方式的实例分析,接下来我会继续做写文件的分析。




阅读(7842) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

weizhulinux2013-10-12 23:32:04

好文章顶