第七章
7.1 文件操作级别
文件操作分5个级别(从低到高):
(1)硬件级别:
文件操作包括:fdisk——将硬盘、U盘或SDC盘分区;
mkfs——格式化磁盘分区,为系统做好准备;
fsck——检查和维修系统;
碎片整理——压缩文件系统中的文件。
(2)操作系统内核中的文件系统函数:每个系统操作内核均可为基本文件操作提供支持。Unix系统内核中的函数有(前缀k表示内核函数):
(3)系统调用:用户模式程序使用系统调用来访问内核函数。
此程序可读取文件的1024字节,但编译后显示出现错误:
(4)I/O库函数:系统调用可让用户读/写多个数据块,这些数据快只是一系列字节。
C语言提供了一系列标准的库函数,提高了运行效率。
除了读/写内存位置的sscanf()/sprintf()函数之外,所有其他的I/O库函数都建立在系统调用之上,也就是说,它们最终会通过系统内核发出实际数据传输的系统调用。
(5)用户命令:用户可以使用Unix/Linux命令来执行文件操作,而不是编写程序。
用户命令的示例有:mkdir , rmdir , cd , pwd , ls , link , unlink , rm , cat , cp , mv , chmod ……
每个用户命令实际上是一个可执行程序(cd除外),通常会调用I/O库函数,而I/O库函数再发出系统调用来调用相应的内核函数。用户命令的处理顺序为:
(6)sh脚本:虽然比系统调用方便,但是要手动输入命令。sh脚本广泛应用于Linux系统编程。除了sh之外,Perl和Tel等其他脚本语言也使用广泛。
7.2 文件I/O操作
下图为文件I/O操作示意图:
7.3 低级别文件操作
7.3.1 分区
一个块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,称为分区。各分区均可以格式化为特定的文件系统,也可以安装在不同的操作系统上。分区表位于第一个扇区的字节偏移446(0xIBE)处,该扇区称为设备的主引导记录(MBR)。表有4个条目,每个条目有一个16字节的分区结构体定义,即:
也可形成扩展分区链表:
在Linux下创建一个名为mydisk的虚拟磁盘映像文件并在磁盘映像文件上运行fdisk:
编写一个C程序,虚拟磁盘映像的分区和扩展分区,其格式与fdisk相同显示:
(1)访问MBR中的分区表:
(2)假设P4是start_sector=n的扩展类型(类型=5)。
(3)扩展分区形成一个“链表”,以一个NULL“指针”结束。
7.3.2 格式化分区
7.3.3 挂载分区
(1)用dd命令创建一个虚拟磁盘映像:
(2)在vdisk上运行fdisk来创建一个分区P1:
创建分区P1,将分区表写入vdisk并退出fdisk:
(3)创建循环设备并读进程:
(4)格式化 /dev/loop1,它是一个EXT2文件系统:
该分区的大小是63488个扇区。4KB块的扇区大小是63488 / 8=7936。
(5)挂载循环设备:
(6)访问作为文件系统一部分的挂载设备:
(7)设备使用完毕后,使用命令umount /mnt 将其卸载。
(8)循环设备使用完毕后,使用命令losetup -d /dev/loop1 将其断开。
7.4 EXT2文件系统简介
创建一个包含简单EXT2文件系统的虚拟磁盘:
这种EXT2文件系统的布局如图:
- Block#0:引导块——文件系统不会使用它,它用于容纳从磁盘引导操作系统的引导程序。
- Block#1:超级块——用于容纳关于整个文件系统的信息。
- Block#2:块组描述符块——EXT2将磁盘块分成几个组,每个组有8192个块,每组用一个块组描述符结构体描述。
- Block#8:块位图——用来表示某种项的位序列。
- Block#9:索引节点位图——一个索引节点就是用来代表一个文件的数据结构。
- Block#10:索引(开始)节点块——每个文件都用一个128字节的独特索引点结构体表示。
第八章
8.1 系统调用
8.2 系统调用手册页
8.3 使用系统调用进行文件操作
成功创建newdir文件:
8.4 常用的系统调用
8.5 链接文件
有两种类型的链接:硬链接、软连接(或符号链接)
8.5.1 硬链接
ln olspath newpath对应的系统调用为link(char *oldpath, char *newpath)
8.5.2 软连接
命令ln -s oldpath newpath对应的系统调用是symlink(char *oldpath,char *newpath)
8.6 stat系统调用
利用man 2 stat命令显示stat系统调用手册页:
向ChatGpt请求苏格拉底式询问
学习总结
有关文件操作的知识点还需加强记忆,系统调用这一章还有许多不理解的地方,还需进行深入学习。
标签:文件,八章,分区,系统,文件系统,调用,Linux,教材,Block From: https://www.cnblogs.com/20211115fyq/p/17739128.html