1.Linux-文件IO

(1).首先对文件IO的理解

对文件进行操作也就是输入input和输出output,对文件的这种操作简称IO

(2).文件的概念

普通狭义的理解就是,文本文档,word文档,代码文件,压缩包,图片视频

文件广义的理解就是,可操作的设备或接口都是文件,包括键盘,显示屏,鼠标等外设

2.Linux中文件的分类

  1. -(regular)普通文件 (main.c my.mp3)
  2. d(directory)目录文件
  3. p(pipe)管道文件(命名管道)
  4. s(socket)套接字文件(Unix域/本地域套接字)
  5. l(link)链接文件(软链接)
  6. c(character)字符设备文件 (鼠标,键盘,触摸屏)
  7. 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,释放资源。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐