Linux文件IO
1.Linux-文件IO
(1).首先对文件IO的理解
对文件进行操作也就是输入input和输出output,对文件的这种操作简称IO
(2).文件的概念
普通狭义的理解就是,文本文档,word文档,代码文件,压缩包,图片视频
文件广义的理解就是,可操作的设备或接口都是文件,包括键盘,显示屏,鼠标等外设
2.Linux中文件的分类
- -(regular)普通文件 (main.c my.mp3)
- d(directory)目录文件
- p(pipe)管道文件(命名管道)
- s(socket)套接字文件(Unix域/本地域套接字)
- l(link)链接文件(软链接)
- c(character)字符设备文件 (鼠标,键盘,触摸屏)
- b(block)块设备文件 (U盘,固态磁盘,磁盘)
3.文件操作流程
打开文件(open) -> 读写文件(read,write)-> 关闭文件(close)

4.系统IO和标准IO
(1)概念:对文件的操作,基本上就是输入输出,因此一般称为IO接口。
在Linux下,有现成的函数来实现对文件的读取和写入,在操作系统层面上这些专门针对文件的IO接口就被称为系统IO;
在标准C库的层面上,这些针对文件的IO接口就被称为标准IO
(2)系统IO和标准IO的示意图

(3)系统IO和标准IO的区别
系统IO:是众多系统调用中专门用于文件操作的一部分接口
标准IO:是众多标准函数当中专门用于文件操作的一部分接口
标准IO实际上是对系统IO的封装,系统IO是更接近底层的接口。如果把系统IO比喻为菜市场,提供各式肉蛋菜果蔬,那么标准IO就是对这些基本原来的进一步封装,是品类和功能更加丰富的各类酒庄饭店。
(4)如何选择系统IO和标准IO
系统IO
1.由操作系统直接提供的函数接口,特点是简洁,功能单一
2.没有提供缓冲区,因此对海量数据的操作效率较低
3.套接字Socket、设备文件的访问只能使用系统IO
标准IO
1.由标准C库提供的函数接口,特点是功能丰富
2.有提供缓冲区,因此对海量数据的操作效率高
3.编程开发中尽量选择标准IO,但许多场合只能用系统IO
总的来讲,这两组函数接口在实际编程开发中都经常会用到,都是基本开发技能。
(5)一些关于选择系统IO还是标准IO的场景

文件描述符
文件描述符 fd = 进程用来标识打开文件 / 设备的整数编号,是程序和内核交互文件资源的唯一凭证。
文件描述符实质就是一个索引值,Linux下一切皆是文件,普通文件,串口,管道,socket,终端,键盘屏幕统一使用文件描述符进行管理,文件描述符就是用来代表你打开的某个资源。
形象化举例

文件描述符的本质

三个默认固定的fd(进程诞生就有)
程序自启动自动占用3个描述符
fd = 0: 标准输入 stdin(键盘)
fd = 1: 标准输出 stdout(屏幕打印)
fd = 2: 标准错误 stderr(报错打印)
之后open()打开文件,返回fd从3开始递增
常见操作对应fd

fd的特性:
· fd 只在当前进程内有效,不同进程相同数字 fd 代表不同文件;
· close 后该数字会被内核回收,下次 open 优先复用最小空闲 fd;
· 只打开不关闭 → fd 泄露,达到 ulimit 上限后 open 直接失败;
· 进程退出时,内核自动关闭该进程所有 fd,释放资源。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)