当前位置: 首页 > article >正文

初识Linux(13) 由基础IO知识简易封装stdio.h中的FILE

本篇作为上文的拓展,可以锻炼一定的代码能力和进一步理清楚在系统中打开的文件的关系。

初识Linux(12) 操作系统基础IO-CSDN博客

根据源码,以及上文的内容,FILE是由IO_FILE被typedef来的

                                

  本章主要实现以下四个接口           

                  

         

函数的实现都到.c中去实现:

其中的size和capacity是用来维护语言缓冲区outbuffer数组的 

先只测试第一个函数。

如何在linux中把一个.h和一个.c给联系起来?

          两个.o文件可以直接链接起来。.o文件具有可连接属性。

成功了。

 fwrite的功能是将进程中的内容向语言缓冲区去写(拷贝),并且在需要刷新时执行刷新。

memcpy的时候注意,要考虑缓冲区可能本来就有内容,所以要在数组的起始位置加上size

mfflush需要注意就是记得让size归零,因为刷新之后缓冲区应该再从0开始加入东西。

mclose:关闭文件时自动文件刷新

                       

测试函数:

每过一秒就cat一下log.txt,就能一行一行的获得内容

但如果此时删掉17行%d之后的\n。每次数据不会刷新,只会不断的往缓冲区去放。

此时应该是直到程序结束才会整体刷新出来。

或者可以直接调用手动刷新:

使用fsync(观察不到太明显的现象):

           

小结:

FILE是对struct file的再封装,file是偏底层的概念,里面有指向对应的文件内核缓冲区,用户级缓冲区则被封装在FILE中,当fwrite时,先写到FILE的用户级别缓冲区,再通过fflush刷新到内核缓冲区(因为file在FILE中,所以)。如果此时电脑的IO压力不大,就会自动将内核的刷新到外设上,如果压力大,用户又不想等,就可以通过fsnyc将内核的内容刷新到外设上。


http://www.kler.cn/a/576928.html

相关文章:

  • Unity AI 技术浅析(二)
  • 【时时三省】(C语言基础)赋值语句
  • 大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景
  • c#面试题整理
  • QT登录系统界面
  • 一周热点-文本生成中的扩散模型- Mercury Coder
  • 中级网络工程师面试题参考示例(2)
  • Java停车平台高并发抢锁技术方案设计 - 慧停宝开源停车管理平台
  • 【奇点时刻】通义千问开源QwQ-32B技术洞察报告(扫盲帖)
  • 2490小蓝的括号串
  • React基础之组件通信
  • ‌HTTP/1.0、HTTP/2.0和HTTP/3.0的区别
  • 网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
  • 番外篇 - Docker的使用
  • PyTorch深度学习框架60天进阶学习计划第14天:循环神经网络进阶
  • Flink SQL 读取 Kafka 数据到 Mysql 实战
  • 常见排序算法鉴赏(原理剖析+动图演示)
  • DeepSeek 与 ChatGPT的主要区别
  • 揭开AI-OPS 的神秘面纱 第三讲(上)数据平台层技术架构与组件选型分析
  • 2025网络安全漏洞