Linux基础IO(二):系统文件IO怎么做?
- 内容介绍
- 文章标签
- 相关推荐
翻旧账。 说到Linux下的文件操作, 大家可能都比较熟悉C语言的文件操作接口,如fopenfreadfwrite等,但你有没有想过这些接口底层是如何实现的?它们与Linux系统的文件IO有什么关系?今天我们就来探讨一下Linux基础IO:系统文件IO怎么做?
一、 IO操作的层级调用关系
换句话说... 简单C/C++程序会调用系统调用,然后系统调用再调用操作系统,接着操作系统调用硬件驱动,再说说硬件驱动操作硬件。这个过程就像一个层层嵌套的函数调用。

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文件系统为例 . 管理文件的系统叫文件系统 。磁盘上有很多“块 ”,每个 “块 ”都有自己的编号 . 管理这些 “块 ”就是管理磁盘 . 是不是很绕啊 ?反正我觉得挺绕的 !~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!,在我看来...
…… 是的 没错 就是这样 ~! ……
| 文件系统类型 | 说 明 |
|---|---|
| ext2 | 早期的 Linux 文件 |
| ext4 | ext2 的升级版, 支持更 |
翻旧账。 说到Linux下的文件操作, 大家可能都比较熟悉C语言的文件操作接口,如fopenfreadfwrite等,但你有没有想过这些接口底层是如何实现的?它们与Linux系统的文件IO有什么关系?今天我们就来探讨一下Linux基础IO:系统文件IO怎么做?
一、 IO操作的层级调用关系
换句话说... 简单C/C++程序会调用系统调用,然后系统调用再调用操作系统,接着操作系统调用硬件驱动,再说说硬件驱动操作硬件。这个过程就像一个层层嵌套的函数调用。

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文件系统为例 . 管理文件的系统叫文件系统 。磁盘上有很多“块 ”,每个 “块 ”都有自己的编号 . 管理这些 “块 ”就是管理磁盘 . 是不是很绕啊 ?反正我觉得挺绕的 !~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~~~~~!!!!!!!~~~~~~~!!!!!,在我看来...
…… 是的 没错 就是这样 ~! ……
| 文件系统类型 | 说 明 |
|---|---|
| ext2 | 早期的 Linux 文件 |
| ext4 | ext2 的升级版, 支持更 |

