第46天 文件IO概念

一.文件IO的介绍

1.定义:

文件IO是在POSIX(可移植操作系统接口)中定义的一组输入输出的函数,

涉及操作系统和应用程序 之间的交互,用于读取和写入存储在永久性存储介质(如硬盘、SSD、USB闪存盘等)上的数据;

2.跨平台性:

不同操作系统(如UNIX、Windows、Linux)的文件IO机制存在差异,接口、调用方式和底层实 现逻辑各有特点;

3.高效实现原理:

1.直接交互硬件/文件系统:

绕过高级缓冲,直接发起系统调用访问磁盘等设备,数据传输路径短,适 合对实时性、精准控制要求高的场景(如设备驱动开发);

2.无用户态缓冲:

不依赖用户态缓冲机制,每次读写更贴近硬件真实操作,但频繁调用会增加系统开 销,需开发者按需优化(如手动合并读写请求);

4.特点:

1.没有缓冲机制,每次调用都会引起系统调用;

2.围绕文件描述符进行操作,相当于标准IO中的流(FILE *),文件描述符是正整数;

3.默认打开三个描述符:标准输入(0) 标准输出(1) 标准错误(2)

4.除目录文件,其他类型文件都可以操作;

5.可移植性相对较弱;

5.与标准IO区别

|------|----------------------------------|-----------------------|
| | 文件IO | 标准IO |
| 概念 | 对文件系统中的文件进行读写 | 程序与终端(控制台)的交互 |
| 用途 | 持久化存储、跨程序数据交换 | 即时交互、简单调试 |
| 操作对象 | 磁盘文件(需路径或描述符) | 以流为抽象,覆盖终端和磁盘文件 |
| 数据流向 | 程序 ⇄ 磁盘(持久化) | 程序 ⇄ 终端(临时交互) |
| 缓冲机制 | 默认缓冲 | stdout:行缓冲 stderr:无缓冲 |
| 错误处理 | 需显式处理文件不存在、权限不足等 | 通常无需特殊处理(终端直接反馈) |
| 典型场景 | 配置文件读写、日志记录、数据存储等等 | 命令行参数输入、结果显示、错误提示等等 |
| 性能特点 | 大文件或批量读写,文件IO通过手动优化(调整读写块大 小)更高效 | 频繁小数据读写时,标准IO的缓冲机制更高效 |
| 生命周期 | 数据持久保存 | 会话结束后数据丢失 |

二.文件描述符

1.定义:

文件描述符是操作系统内核为每个打开的文件/设备分配的唯一整数标识符,用于标识和跟踪进程 与文件的交互,在Linux/Unix中,它是底层文件IO操作的核心参数;

2.本质:

1.它是指向内核中维护的文件表(File Table),该表中记录了文件的状态,位置指针等信息;

2.每个进程都有自己独立的文件描述符表,通常是从0开始的编号,相互不干扰;

Linux系统中一个正 在执行的程序中文件描述符的范围是0-1023,可通过ulimit调整,一般使用默认值;

3.作用:

1.连接用户进程与内核资源:通过文件描述符,进程可以请求内核进行文件读写、设备操作等,无需 关心底层实现细节;

2.资源管理:操作系统通过文件描述符跟踪哪些文件被哪些进程打开,并在进程关闭文件或退出时自 动回收资源

4.特点:

1.唯一性:同一个进程内,每个文件描述符对应唯一的打开文件;

2.非负整数:通常是小整数(如0、1、2),但可动态分配(如 open()返回的新描述符);

3.跨函数传递:可在不同系统调用间传递,代表对同一文件的持续操作;

5.常见文件描述符编号:

相关推荐
惜离殇1 个月前
从零开始的敲代码生活--Linux应用软件(文件操作基础2)
linux·文件io·目录io
lightqjx2 个月前
【Linux系统】基础 IO
linux·c语言·重定向·缓冲区·文件io·文件的系统调用
艾莉丝努力练剑4 个月前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
Bruce_kaizy4 个月前
c++ linux环境编程——文件io介绍以及open 、write 、read 三剑客深度详解
linux·服务器·c++·ubuntu·操作系统·文件io
小新同学^O^5 个月前
简单学习 --> 文件IO
java·学习·文件io
Bruce_kaizy5 个月前
c++ linux环境编程——从应用层到linux内核深入了解文件io的调用机制(爆肝)
linux·c++·c·嵌入式linux·文件io
皮皮哎哟8 个月前
Linux文件IO与目录IO编程深度解析:从系统调用到实战应用
开发语言·linux内核·文件io·目录io·时间相关接口·c预言
嵌入小生0078 个月前
文件IO\目录IO\时间接口函数 --- IO编程 --- 嵌入式(Linux)
linux·c语言·vscode·vim·文件io·目录io·时间函数接口
拾光Ծ8 个月前
【Linux】一切皆文件:深入理解文件与文件IO
linux·c语言·运维开发·系统编程·重定向·linux开发·文件io