文件的概念
在Linux系统语境下,文件(file)一般有两个基本含义:
-
狭义:指普通的文本文件,或二进制文件。包括日常所见的源代码、word文档、压缩包、图片、视频文件等等。

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

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


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

4617

被折叠的 条评论
为什么被折叠?



