《Unix/Linux系统编程》第7,8章学习笔记 20191329马静怡
第7章 文件操作
1.文件操作级别
(1)硬件级别
- fdisk:将硬盘、U盘或SDC盘分区
- mkfs:格式化磁盘分区,为系统做好准备
- fsck:检 查和维修系统
- 碎片整理:压缩文件系统中的文件
(2)操作系统内核中的文件系统函数
前缀为k表示内核函数
(3)系统调用
open()、read()、lseek()、close()
(4)I/O库函数
FILE:fopen()、fread();fwrite()、fseek()、fclose()、fflush()
char:getc()、getchar()、ugetc()、putc()、putchar()
line:gets()、fgets()、puts()、fputs()
formatted:scanf()、fscanf()、sscanf()、printf()、fprintf()、sprintf()
(5)用户命令
mkdir,rmdir,cd,pwd,ls,link,unlink,rm,cat,cp,mv,chmod,etc.
(6)sh脚本
2.文件I/O操作
3.低级别文件操作
分区
- 一个块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,成为分区。
- 分区表唯一第一个扇区的字节偏移446(0x1BE)处,成为设备的主引导记录(MBR)
格式化分区
- 为了存储文件,必须先为特定的文件系统准备好分区,该操作成为格式化磁盘或磁盘分区
- 为了确保数据的一致性,用户应该先卸载设备,然后自断开连接
挂载分区
4.EXT2文件系统
Linux一直使用EXT2作为默认文件系统,EXT3是EXT2的扩展,增加的主要是一个日志文件,EXT4是EXT3的扩展,增加了磁盘块的分配(连续的)。
- Block#0:引导块,文件系统不使用它,用于容纳从磁盘引导操作系统的引导程序。
- Block#1:超级块,用于容纳关于整个文件系统的信息。
- Block#2:块组描述符块,EXT2将磁盘分成几个组(每组8192块),每组用一个块组描述符结构体描述。
- Block#8:块位图,用来表示某种项的位序列。
- Block#9:索引节点位图,用来代表一个文件的数据结构。
- Block#10:索引节点,每个文件都用一个128字节(EXT4的是256字节)的独特索引节点结构体表示。
第8章 使用系统调用进行文件操作
1.系统调用
简称syscall,是一种允许进程进入Kmode以执行Umode不允许操作的机制。
2.系统调用手册页
在Ubuntu Linux中,手册页保存在/usr/share/man目录中,man2子目录中列出了所有的系统调用手册页。
- man 2 NAME :显示系统调用名称的手册页
3.使用系统调用进行文件操作
系统调用必须由程序发出,用法就像函数调用。每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用。
4.常用的系统调用
- stat:获取文件状态信息
- open:打开一个文件进行读、写、追加
- close:关闭打开的文件描述符
- read:读取打开的文件描述符
- write:写入打开的文件描述符
- lseek:重新定位文件描述符的读/写偏移量
- dup:将文件描述符复制到可用的最小描述符编号中
- dup2:将oldfd复制到newfd中,如果newfd已打开,先将其关闭
- link:将新文件硬链接到旧文件
- unlink:取消某个文件的链接,如果文件链接数为0,则删除文件
- symlink:创建一个符号链接
- readlink:读取符号链接文件内容
- umask:设置文件创建掩码,文件权限为(mask&~umask)
5.链接文件
(1)硬链接文件
命令:ln oldpath newpath (创建从newpath到oldpath的硬链接)
系统调用:link(char *oldpath,char *newpath)
unlink(char *pathname)
(2)符号链接文件
命令:ln -s oldpath newpath
系统调用:symlink(char *oldpath,char *newpath)
6.stat系统调用
- stat文件状态
stat按文件名统计指向文件,并在缓冲区中填写stat信息 - stat结构体
- stat与文件索引节点
每个索引节点在存储设备上都有唯一的索引节点编号(ino) - 文件类型和权限
st_mode是16位,前4位是文件类型,接下来的3位表示文件的特殊用法,其余9位是文件保护权限位。 - opendir-readdir函数
- readlink函数
- ls程序