2019独角兽企业重金招聘Python工程师标准>>>

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

一、  fread和read的不同点

1)

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

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

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

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

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

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

转载于:https://my.oschina.net/linjiezang/blog/2885480

转:文件系统read,write缓存,有点意思相关推荐

  1. linux 更改ctime_Linux 的文件系统及文件缓存知识点整理

    Linux的文件系统特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储. 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置. 如果文件系统中有的文件是热点文件, ...

  2. _Linux 的文件系统及文件缓存知识点整理

    Linux的文件系统特点 文件系统要有严格的组织形式,使得文件能够以块为单位进行存储. 文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置. 如果文件系统中有的文件是热点文件, ...

  3. Linux的文件系统及文件缓存知识点整理

    Table of Contents Linux的文件系统 文件系统的特点 ext系列的文件系统的格式 inode与块的存储 inode位图和块位图 文件系统的格式 目录的存储格式 Linux中的文件缓 ...

  4. Linux文件系统(四)文件缓存

    Linux文件系统 Linux文件系统(一)文件系统概述 Linux文件系统(二)磁盘文件系统 Linux文件系统(三)虚拟文件系统 Linux文件系统(四)文件缓存 Linux文件系统(四)文件缓存 ...

  5. Linux 文件系统剖析

    Linux 文件系统剖析 按照分层结构讨论 Linux 文件系统 M. Tim Jones, 顾问工程师, Emulex Corp. 简介: 在文件系统方面,Linux® 可以算得上操作系统中的 &q ...

  6. 文件系统:Linux文件系统剖析

    查看原文:http://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/ 在文件系统方面,Linux® 可以算得上操作系统中的 " ...

  7. Linux 操作系统原理 — 文件系统 — 虚拟文件系统

    目录 文章目录 目录 为什么需要文件系统? Linux 的虚拟文件系统 创建 Linux 文件系统 为什么需要文件系统? 程序 = 数据结构 + 算法,所有的应用程序都需要存储和检索信息,进程运行时它 ...

  8. linux存储--从内核文件系统看文件读写过程(四)

    系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行.处理器设有两种模式:"用户模式&q ...

  9. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

最新文章

  1. 吴恩达 coursera ML 第八课总结+作业答案
  2. Qt中moc问题(qt moc 处理 cpp)
  3. C语言高级编程:指针变量p指向的地址与p自身的地址
  4. 在anaconda中安装tensorflow-GPU版本
  5. linux网络编程之并发服务器的三种实现模型 (超级经典)
  6. struts2遍历select
  7. 智慧交通day02-车流量检测实现10:多目标追踪实现
  8. 字节数组和字符串的相互转化……
  9. Linux GCC GDB 第一节
  10. Goroutine心跳检测
  11. MySQL存储过程 — 解析 XML 数据并实现插入操作
  12. putty screen 快捷键
  13. html 三色渐变色,CSS3常用的几种颜色渐变模式总结现
  14. 无法在驱动器0的分区1上安装windows
  15. bootstrap-tagsinput操作标签对象,实现从表格中选人和移除
  16. 对辛辛那提原始数据集(ims)数据划分正常,内圈故障,滚动体故障,外圈故障(python代码),可作为自己故障诊断模型实验的另一个数据集(因为CWRU普遍而言,准确度和被使用频率已经极高)
  17. 使用JS解析JSON数组
  18. 大数据培训机构靠谱吗
  19. BSides Noida CTF 2021 web题wowooofreepoint writeup(两道反序列化)
  20. (3分钟速通)Visual Odometry的特征点法和直接法

热门文章

  1. AndroidStudio中提示:android.content.res.Resources NotFoundException: String resource ID 0x
  2. AndroidStudio修改默认C盘配置文件夹(.android.gradle.AndroidStudio)以及修改后避免踩的坑
  3. inspinia前端模板怎样编写消息提示框点击确定后的回调方法
  4. Git常见错误(附解决办法)
  5. php 设置断点,PHP xdebug安装配置(支持断点调试)
  6. 创新、颠覆、引领,从 0 到百亿美元市值的创操作指南
  7. 一起教育科技携手神策数据,数据赋能智能教育新时代
  8. Java Web Start入门基础教程
  9. LeetCode 编程 二
  10. 什么是MyCat?为什么要用到MyCat呢?