《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程序
posted @ 2021-10-10 20:04  修勾  阅读(47)  评论(0编辑  收藏  举报