
文章目录
- 1. 准备工作
- 2. my_fopen
- 3. my_fwrite
- 4. my_fclose和my_fflush
- 5. syncfs
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之前就刷新了,所以缓冲区里没有,所以就一个。



















