首页 > 其他分享 >open和fopen无缓冲IO与有缓冲IO

open和fopen无缓冲IO与有缓冲IO

时间:2023-04-19 15:33:24浏览次数:20  
标签:文件 缓冲 IO 缓冲区 fopen open

在UNIX系统中,open和fopen系统调用都用于打开文件,但他们的缓冲机制不同。
open系统调用是一种底层的系统调用,用于打开文件并返回一个文件描述符。它不涉及任何缓冲机制,所以是无缓冲IO。
fopen是一个更高层的函数,它是基于标准C库实现的,提供了更丰富的文件操作函数。fopen函数打开一个文件,并返回一个FILE指针。
FILE指针是一个抽象数据类型,封装了底层的文件描述符以及一些缓冲区信息。fopen函数提供了缓冲机制,这是因为标准C库会为每一
个FILE对象分配一个缓冲区,并在需要时将缓冲区的信息写入磁盘。所以fopen函数是又缓冲IO.
需要注意的是,无缓冲IO和有缓冲IO所指的是数据在内存和外部设备之间传输时是否使用缓冲机制,而不是在哪个层次上使用缓冲机制。
在底层系统调用中,操作系统内核会直接将数据从内存复制到外部设备中,不会使用任何缓冲机制,所以是无缓冲IO.而在C标准库中,使
用了缓冲区来缓存数据,所以是有缓冲IO.

缓冲从区别上来看可以简单看作是用户态文件缓冲区/文件流/FILE
对于磁盘文件的读写只有内核态空间才有操作权限(内存分为内核态空间和用户态空间),open就是创建一个文件对象,
分配一个文件描述符。这个文件对象在内核态空间,即对应了一个磁盘文件,我们通过文件描述符对其操作,即完成了对
磁盘文件的读写。文件描述符类似于一个指针,指向了你要操作的文件对象。

标签:文件,缓冲,IO,缓冲区,fopen,open
From: https://www.cnblogs.com/lq0622/p/17333500.html

相关文章

  • 安装stable diffusion
     suuseradd-msd passwdsdsusdmkdir-p/datacd/datayuminstallgit git clonehttps://github.com/AUTOMATIC1111/stable-diffusion-webui.gitwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh--no-......
  • UNION ALL用法 以及 UNION ALL和UNION的区别
    部分参考自文章:https://blog.csdn.net/a200822146085/article/details/119545374(CC4.0BY-SA版权协议)CSDN「我心依依旧」https://www.1keydata.com/cn/sql/sql-unionall.php SQLUnionAll SQL指令UNIONALL用法UNIONALL 这个指令的目的也是要将两个SQL语句的......
  • @SpringBootApplication等四个爆红
    在黑马的上面学习,按步骤做,出现爆红问题,之后尝试过很多方法,后发现没导包。导包后可以 ......
  • Heterogeneous Graph Attention Network
    目录概符号说明HANNode-levelattentionSemantic-levelattention代码WangX.,JiH.,ShiC.,WangB.,CuiP.,YuP.andYeY.Heterogeneousgraphattentionnetwork.WWW,2019.概Attention+异构图.符号说明\(\mathcal{G}=(\mathcal{V,E})\),图;\(\phi:......
  • taro3 报错 TypeError: className.split is not a function
    项目原来跑的好好的,昨天升级了几个包,引用了个UI库,然后今天上班运行项目就跑不起来了,项目是在旧的项目上升级的之前的写法<Viewkey={idx}className={["tabbar-item",isActive&&"active"]}onClick={this.switchTab.bind(this,item.key)}>{......
  • pycharm中运行js文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in
      在做有道翻译时发现python文件中调用js文件并读取,出现了UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xafinposition205:illegalmultibytesequence报错。其实修改很简单,我们只需要将subprocess.py文件Popen类属性中的enconding='None',改为enconding='utf-8'就可......
  • Mac运行Windows用VMware Fusion Pro 13(VM虚拟机)
    VMwareFusionPro13是一款Mac电脑上的虚拟机软件,可以让用户在Mac操作系统上运行Windows、Linux等多种操作系统和应用程序。它提供了直观易用的用户界面和高级网络功能,还采用了最新的虚拟化技术以提供更快更稳定的性能。VMwareFusionPro13也具有多层安全保护,包括加密虚拟机和......
  • NB-IOT与LoRa相比,哪些技术比较有优势?
    要做NB-IOT和LoRa的对比分析,首先要考虑关于物联网终端的功耗需要的两个重要的因素,即节点的电流消耗(峰值电流和平均电流)和协议内容。蜂窝网络的同步协议要求终端必须定期联网,具有较短的下行延迟。LoRaWAN采用异步的ALOHA协议,需要定期的唤醒终端,终端可根据具体应用场景需求进行或长......
  • 5.数据交换格式与 SpringIOC 底层实现
    数据交换格式与SpringIOC底层实现一、课程目标XML和JSONJava反射机制手写SpringIOC二、什么是数据交换格式客户端与服务器常用数据交换格式xml、json、html三、数据交换格式用场景移动端(安卓、IOS)通讯方式采用http协议+JSON格式走restful风格。很多互......
  • 11.Session与Cookie(自定义Session)
    Session与Cookie(自定义Session)课程目标:#熟悉Cookie、Session底层实现原理、自定义缓存、自定义Token、表单重复提交#解决方案、Servlet之Fileter解决XSS攻击。一、.会话管理入门1.1生活中会话我:小张,你会跳小苹果码?小张:会,怎么了?我:公司年会上要表演节目,你教教......