解码Linux文件IO基础

文件的概念

在Linux系统语境下,文件(file)一般有两个基本含义:

  • 狭义:指普通的文本文件,或二进制文件。包括日常所见的源代码、word文档、压缩包、图片、视频文件等等。
    image

  • 广义:除了狭义上的文件外,几乎所有可操作的设备或接口都可视为文件。包括键盘、鼠标、硬盘、串口、触摸屏、显示器等,也包括网络通讯端口、进程间通讯管道等抽象概念。
    image

根文件系统说明

  • 需要注意:Linux系统是离不开文件系统的,在Linux内核启动之后首先搭载的就是根文件系统rootfs,根文件系统rootfs本质就是文件系统,只不过是Linux内核挂载的第一个文件系统。而Linux内核源码是存储在文件系统中,所以在linux系统启动的过程中启动引导程序uboot会加载内核并利用内核挂载根文件系统。根文件系统被挂载之后,一些服务程序和一些脚本文件才可以存储在文件系统中,其他的文件系统才可以被挂载。根文件系统会提供一些服务:比如根文件系统会提供一个根目录(存储文件和目录)、提供一个shell终端(用户才可以输入命令)、根文件系统会存储应用程序。总而言之,Linux内核离开根文件系统是无法正常工作的。
linux系统的启动流程

嵌入式系统启动过程

  • 文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录(目录就相当于 Windows 中的文件夹),也可以是文件,而每一个目录中又可以包含(子)目录或文件。如此反复就可以构成一个庞大的文件系统。使用这种树状、具有层次的文件结构主要目的是方便文件系统的管理和维护,想象一下,如果所有的文件都放在一个目录下,其文件系统的管理和维护将变成一场噩梦。同样,为了方便观察Linux系统的目录结构,所以Linux内核也提供了一个shell命令:tree,该命令可以以树状结构打印出目录的层次,当然,tree命令需要在Linux系统中提前安装。
    在shell终端中输入命令: sudo apt-get install tree 安装tree命令
根目录出发的树状图

根目录

Linux的文件类型(Linux系统秉持一切皆文件)

  • 规则文件(-):存在于外部存储器中,用于存储普通数据。
  • 块设备文件(b):块设备在应用层的访问接口。
  • 字符设备文件(c):字符设备在应用层的访问接口。
  • 目录文件(d):用于存放目录项,是文件系统管理的重要文件类型。
  • 链接文件(l):用于间接访问另外一个目标文件,相当于windows快捷方式。
  • 管道文件(p):一种用于进程间通信的特殊文件,也称为命名管道FIFO。
  • 套接字文件(s):一种用于网络间通信的特殊文件。

系统IO与标准IO

对文件的操作,基本上就是输入输出,因此也一般称为IO接口。在操作系统的层面上,这一组专门针对文件的IO接口就被称为系统IO;在标准库的层面上,这一组专门针对文件的IO接口就被称为标准IO,如下图所示:
image
image

  • 系统IO:是众多系统调用当中专用于文件操作的一部分接口。
  • 标准IO:是众多标准函数当中专用于文件操作的一部分接口。

从图中还能看到,标准IO实际上是对系统IO的封装,系统IO是更接近底层的接口。如果把系统IO比喻为菜市场,提供各式肉蛋菜果蔬,那么标准IO就是对这些基本原来的进一步封装,是品类和功能更加丰富的各类酒庄饭店。

如何选择系统IO与标准IO

  • 系统IO
    • 由操作系统直接提供的函数接口,特点是简洁,功能单一
    • 没有提供缓冲区,因此对海量数据的操作效率较低
    • 套接字Socket、设备文件的访问只能使用系统IO
  • 标准IO
    • 标准C库提供的函数接口,特点是功能丰富
    • 有提供缓冲区,因此对海量数据的操作效率高
    • 编程开发中尽量选择标准IO,但许多场合只能用系统IO

总的来讲,这两组函数接口在实际编程开发中都经常会用到,都是基本开发技能

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值