Linux基础IO(二):系统文件IO怎么做?

2026-05-22 10:125阅读0评论建站教程
  • 内容介绍
  • 文章标签
  • 相关推荐

翻旧账。 说到Linux下的文件操作, 大家可能都比较熟悉C语言的文件操作接口,如fopenfreadfwrite等,但你有没有想过这些接口底层是如何实现的?它们与Linux系统的文件IO有什么关系?今天我们就来探讨一下Linux基础IO:系统文件IO怎么做?

一、 IO操作的层级调用关系

换句话说... 简单C/C++程序会调用系统调用,然后系统调用再调用操作系统,接着操作系统调用硬件驱动,再说说硬件驱动操作硬件。这个过程就像一个层层嵌套的函数调用。

基础IO(二):系统文件IO

C语言文件操作简单回顾

C语言的相关文件接口汇总如下表:

接口 功能
fopen 打开文件
fread 读取文件内容
fwrite 写入文件内容
fclose 关闭文件

默认打开的三个流是stdin、 stdout和stderr,这些都是FILE类型的指针。

系统文件I/O

open: 打开文件的关键

open函数的个参数是权限。

2.2 第二个参数:打开方式的奥秘

第二个参数是通过宏定义和位运算来实现的, 比如是把整数当成32个开关的面板。

核心原理:把整数当成 32 个开关的面板.

2.2.1 第一步:定义开关

比方说 O_RDONLY、O_WRONLY、O_RDWR等宏定义就是通过左移运算符来定义的。

2.2.2 第二步:按下开关

在调用open函数时 我们可以通过按位或运算符来组合多个开关,比如O_RDWR | O_CREAT.,完善一下。

C语言的文件操作都是对底层系统调用的封装,

函数名 功能描述
fopen: 打开一个文件并返回一个FILE指针。
fread: 从文件中读取数据到缓冲区。
fwrite: 将缓冲区的数据写入.

open的返回值: 文件描述符fd

open函数的返回值是一个整数,即文件描述符。它是Linux系统中用于标识打开文件的唯一标识符。 整起来。 关于fd后续章节会详细展开.

close: 关闭文件的正确姿势?如何理解?!~~!!~!~!!~~!~!

close.fd哪里来的呢? 当然是通过open.有开就有关, 我惊呆了。 不然会造成资源泄漏.

write & read:数据的读写艺术 ?emmmm....还行吧 ~!~~!~!

  • write: 向文件中写入数据.
  • read: 从文件中读取数据.
  • 虽然C语言提供了诸如printf,fprintf,fscanf, fwrite,fread,fgets,getc,getchar等众多输入输出函数, 但它们终归是对系统调用 进行了封装以提供更便捷的使用方式.

....

简单来说 就是 一层层的调用呗 ~_~ ,太离谱了。!

Linux下 文件系统的管理艺术 !!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!

Linux下的ext2文件系统为例 . 管理文件的系统叫文件系统 。磁盘上有很多“块 ”,每个 “块 ”都有自己的编号 . 管理这些 “块 ”就是管理磁盘 . 是不是很绕啊 ?反正我觉得挺绕的 !~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!,在我看来...

…… 是的 没错 就是这样 ~! ……

…… 各种各样的 文件系统 类型 对比 ~~ 支持的功能 特性 等等 ~~ 可以自行搜索哦 ~~ 不过好像有点跑题了 ~~ 闲话少叙 直接上干货 ~~或者 不是干货 ~~ 你猜啊 ~~ 猜不到吧 ~~哈哈哈 ~~ 总之 我们扯了这么多 都没有讲到重点 ~~ 到底什么是重点 ~~ 大家心知肚明 ~~ 我就不说了 ~~嘿嘿 ~~ 闲话少叙 言归正传 继续我们的 系统文件 IO 之旅 !!!~~~!!!!!~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!! ………………….扯远了 我们继续回到正题 系统 地 操作 硬盘上的 文件 的方法 就是 使用 上述 的 接口 来 实现 对 文件 的 操作.. 不 过 在 此之 前 我们 还 需要 先 了 解一 下 linux 中 的 文 件描 述 符 fd 以及 它 的 相关 知识.. 有 了 这些 知识 后 才 能 更 好 地 理解 linux 下 的 文 件 io 操作.. 所以 接 下来 就 让 我们 一起 来 看看 linux 中 的 文 件描 述 符 fd 到底 是 什么 东东 …. 为 什 么 它 如 此 重 要 …. 总 而 言 之 就是 一堆 理论 + 一堆 实例 + 一堆 代码 …. 你 看懂 了 吗 ? 反正 我 是 有点 蒙 了 …. 不 过 还 是 那句 老 话 : “ 书山 有 路勤 为径 , 学海 无涯 苦 作舟 ” …. 只 要 大家 多 多 练习 , 多 多 操作 , 相信 大家 都 能 成 为 linux 下 文 件 io 操作 的 高手 !~~~~~~~~~!!!!!!!!!!!!!!!!!!!!!………..
文件系统类型 说 明
ext2 早期的 Linux 文件
ext4 ext2 的升级版, 支持更

翻旧账。 说到Linux下的文件操作, 大家可能都比较熟悉C语言的文件操作接口,如fopenfreadfwrite等,但你有没有想过这些接口底层是如何实现的?它们与Linux系统的文件IO有什么关系?今天我们就来探讨一下Linux基础IO:系统文件IO怎么做?

一、 IO操作的层级调用关系

换句话说... 简单C/C++程序会调用系统调用,然后系统调用再调用操作系统,接着操作系统调用硬件驱动,再说说硬件驱动操作硬件。这个过程就像一个层层嵌套的函数调用。

基础IO(二):系统文件IO

C语言文件操作简单回顾

C语言的相关文件接口汇总如下表:

接口 功能
fopen 打开文件
fread 读取文件内容
fwrite 写入文件内容
fclose 关闭文件

默认打开的三个流是stdin、 stdout和stderr,这些都是FILE类型的指针。

系统文件I/O

open: 打开文件的关键

open函数的个参数是权限。

2.2 第二个参数:打开方式的奥秘

第二个参数是通过宏定义和位运算来实现的, 比如是把整数当成32个开关的面板。

核心原理:把整数当成 32 个开关的面板.

2.2.1 第一步:定义开关

比方说 O_RDONLY、O_WRONLY、O_RDWR等宏定义就是通过左移运算符来定义的。

2.2.2 第二步:按下开关

在调用open函数时 我们可以通过按位或运算符来组合多个开关,比如O_RDWR | O_CREAT.,完善一下。

C语言的文件操作都是对底层系统调用的封装,

函数名 功能描述
fopen: 打开一个文件并返回一个FILE指针。
fread: 从文件中读取数据到缓冲区。
fwrite: 将缓冲区的数据写入.

open的返回值: 文件描述符fd

open函数的返回值是一个整数,即文件描述符。它是Linux系统中用于标识打开文件的唯一标识符。 整起来。 关于fd后续章节会详细展开.

close: 关闭文件的正确姿势?如何理解?!~~!!~!~!!~~!~!

close.fd哪里来的呢? 当然是通过open.有开就有关, 我惊呆了。 不然会造成资源泄漏.

write & read:数据的读写艺术 ?emmmm....还行吧 ~!~~!~!

  • write: 向文件中写入数据.
  • read: 从文件中读取数据.
  • 虽然C语言提供了诸如printf,fprintf,fscanf, fwrite,fread,fgets,getc,getchar等众多输入输出函数, 但它们终归是对系统调用 进行了封装以提供更便捷的使用方式.

....

简单来说 就是 一层层的调用呗 ~_~ ,太离谱了。!

Linux下 文件系统的管理艺术 !!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!

Linux下的ext2文件系统为例 . 管理文件的系统叫文件系统 。磁盘上有很多“块 ”,每个 “块 ”都有自己的编号 . 管理这些 “块 ”就是管理磁盘 . 是不是很绕啊 ?反正我觉得挺绕的 !~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!,在我看来...

…… 是的 没错 就是这样 ~! ……

…… 各种各样的 文件系统 类型 对比 ~~ 支持的功能 特性 等等 ~~ 可以自行搜索哦 ~~ 不过好像有点跑题了 ~~ 闲话少叙 直接上干货 ~~或者 不是干货 ~~ 你猜啊 ~~ 猜不到吧 ~~哈哈哈 ~~ 总之 我们扯了这么多 都没有讲到重点 ~~ 到底什么是重点 ~~ 大家心知肚明 ~~ 我就不说了 ~~嘿嘿 ~~ 闲话少叙 言归正传 继续我们的 系统文件 IO 之旅 !!!~~~!!!!!~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!! ………………….扯远了 我们继续回到正题 系统 地 操作 硬盘上的 文件 的方法 就是 使用 上述 的 接口 来 实现 对 文件 的 操作.. 不 过 在 此之 前 我们 还 需要 先 了 解一 下 linux 中 的 文 件描 述 符 fd 以及 它 的 相关 知识.. 有 了 这些 知识 后 才 能 更 好 地 理解 linux 下 的 文 件 io 操作.. 所以 接 下来 就 让 我们 一起 来 看看 linux 中 的 文 件描 述 符 fd 到底 是 什么 东东 …. 为 什 么 它 如 此 重 要 …. 总 而 言 之 就是 一堆 理论 + 一堆 实例 + 一堆 代码 …. 你 看懂 了 吗 ? 反正 我 是 有点 蒙 了 …. 不 过 还 是 那句 老 话 : “ 书山 有 路勤 为径 , 学海 无涯 苦 作舟 ” …. 只 要 大家 多 多 练习 , 多 多 操作 , 相信 大家 都 能 成 为 linux 下 文 件 io 操作 的 高手 !~~~~~~~~~!!!!!!!!!!!!!!!!!!!!!………..
文件系统类型 说 明
ext2 早期的 Linux 文件
ext4 ext2 的升级版, 支持更