<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Linux on liubang's blog</title><link>https://blog.liubang.cc/tags/linux/</link><description>Recent content in Linux on liubang's blog</description><generator>Hugo</generator><language>en</language><copyright>Copyright © 2019-2026 LiuBang. All Rights Reserved.</copyright><lastBuildDate>Fri, 25 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.liubang.cc/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux磁盘IO</title><link>https://blog.liubang.cc/posts/linux/2022-02-25-linux%E7%A3%81%E7%9B%98io/</link><pubDate>Fri, 25 Feb 2022 00:00:00 +0000</pubDate><guid>https://blog.liubang.cc/posts/linux/2022-02-25-linux%E7%A3%81%E7%9B%98io/</guid><description><![CDATA[<h2 id="前言" data-numberify>前言<a class="anchor ms-1" href="#前言"></a></h2>
<p>做存储开发，一定会经常涉及到 IO 相关的操作。而现在的高级编程语言，往往会帮助我们屏蔽 IO 操作的底层细节，虽然这样能降低开发门槛，提升效率，但是却也导致我们对 IO 底层操作实现的理解不够系统和深入。
所以呢，我一直想抽时间来系统整理一下 Linux IO 涉及的系统调用，以及相互之间的区别和联系，以加深对 IO 操作的理解。</p>

<h2 id="io-操作" data-numberify>IO 操作<a class="anchor ms-1" href="#io-操作"></a></h2>

<h3 id="fwrite" data-numberify>fwrite<a class="anchor ms-1" href="#fwrite"></a></h3>
<p>fwrite 是 c 语言标准库中的文件写入函数，其作用是向指定的文件中写入若干数据。调用 fwrite 实际上是将数据写入到了 c 标准库的 IO Buffer 中。</p>

<h3 id="mmap" data-numberify>mmap<a class="anchor ms-1" href="#mmap"></a></h3>
<p>mmap 将一个文件或者其它对象映射进内存。文件被映射到多个页上，如果文件的大小不是所有页的大小之和，最后一个页不被使用的空间将会清零。mmap 在用户空间映射调用系统中作用很大。</p>

<h3 id="fflush" data-numberify>fflush<a class="anchor ms-1" href="#fflush"></a></h3>
<p>fflush 就是将 c 标准库中的 IO Buffer 中的数据写入到参数 stream 指定的文件中。</p>

<h3 id="fsync" data-numberify>fsync<a class="anchor ms-1" href="#fsync"></a></h3>
<p>fsync 系统调用就是将内核缓冲区中的数据同步到存储介质(如硬盘)。也可以在 open 文件的时候通过开启<code>O_SYNC</code>来开启同步 I/O.</p>

<h2 id="各-io-操作的区别与联系" data-numberify>各 IO 操作的区别与联系<a class="anchor ms-1" href="#各-io-操作的区别与联系"></a></h2>
<p><picture><img class="img-fluid mx-auto d-block" alt="图片引用自 https://oscimg.oschina.net/oscnet/51a17cc9aa34eba47971af609fdecabf398.jpg" src="https://blog.liubang.cc/images/2022-02-28/linux_io_sub_system_arch.jpeg#center?v=3b7bbf8ec99cb76d7d5df5d7dfe0bd84" loading="lazy" width="1216" height="1224" />
</picture>

</p>]]></description></item></channel></rss>