模拟封装C标准库

本文介绍了如何实现my_fopen、my_fwrite和my_fclose函数,以封装自定义的文件操作。在my_fopen中处理文件打开方式,my_fwrite关注行缓冲的写入,my_fclose和my_fflush确保缓冲区数据在文件关闭前被正确刷新。syncfs函数用于将数据从内核缓冲区同步到硬件磁盘。测试展示了不同情况下缓冲区的处理方式。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1. 准备工作

举个例子
在这里插入图片描述
这里我们要实现my_fopen,my_fwrite和my_fclose这三个函数,并封装MyFILE。
在这里插入图片描述
这是MyFILE的封装,然后我们把三个函数接口完成。

2. my_fopen

在这里插入图片描述
这是函数的一个框架,首先,我们要判断它是什么方式打开文件。
在这里插入图片描述
这里默认读方式打开文件,如果是其它方式打开文件就添加属性。
在这里插入图片描述
这里我们就打开文件并开辟空间。
在这里插入图片描述
我们这里模拟的是行缓冲。
在这里插入图片描述
这里我们打开函数就写完了。

3. my_fwrite

框架如下:
在这里插入图片描述
首先,我们要把数据写到缓冲区里面。
在这里插入图片描述
然后去判断行缓冲,因为行缓冲的最后一位是\n:
在这里插入图片描述
既然遇到了\n了,我们就要把缓冲区的数据写到文件中。

4. my_fclose和my_fflush

在关闭文件前,如果缓冲区里面有数据,那么我们就需要刷新缓冲区,所以我们还要写一个接口:
在这里插入图片描述
如果缓冲区里面有数据,那么就全部写入文件中。
在这里插入图片描述
关闭文件前要刷新缓冲区。

5. syncfs

但是我们只是写入到内核上,没有写到硬件上。如果我们要写到硬件上,我们需要这个函数:
在这里插入图片描述
在刷新完后,要写入磁盘上。
在这里插入图片描述

测试
在这里插入图片描述
结果如下:
在这里插入图片描述
这里没有\n,所以先写入缓冲区。fork之后,缓冲区发生写时拷贝,两个一起刷新,所以文件里就有两个。
在这里插入图片描述
这里我们加了一个\n,我们再看运行情况:
在这里插入图片描述
这里fork之前就刷新了,所以缓冲区里没有,所以就一个。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学代码的咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值