文件系统

1. 文件创建(Create)

文件创建是指在文件系统中生成一个新的文件。

操作步骤:

  • 指定文件名: 用户或应用程序需要指定新文件的名称和路径。
  • 分配目录项: 文件系统会在目标目录下分配一个新的目录项,用于存储文件的元数据。
  • 分配磁盘空间: 文件系统分配一定数量的磁盘块给该文件,通常至少包含一个用于存储文件的内容。
  • 初始化文件描述符: 创建一个文件描述符,供后续文件操作使用。

系统调用:

  • creat():创建一个新文件,通常同时打开该文件。
  • open():可以用于创建文件,当文件不存在时,如果指定了O_CREAT标志,文件将被创建。

2. 文件删除(Delete)

文件删除是指从文件系统中移除一个文件,使其无法再被访问。

操作步骤:

  • 找到文件路径: 系统需要确定要删除的文件的完整路径。
  • 释放目录项: 文件系统从目录结构中移除该文件的目录项。
  • 释放磁盘空间: 文件系统释放该文件占用的所有磁盘块,使这些块可以被其他文件重用。
  • 关闭文件描述符: 如果文件正被打开,需要关闭其对应的文件描述符。

系统调用:

  • unlink():用于删除文件。
  • remove():删除文件或目录。
  • rmdir():用于删除空目录。

3. 文件读取(Read)

文件读取是指从文件中获取数据,通常涉及将数据从磁盘或缓存加载到内存。

操作步骤:

  • 打开文件: 使用文件描述符打开文件。
  • 读取数据: 指定读取的字节数,系统会从指定位置(或当前读指针)开始读取数据。
  • 更新读指针: 读取数据后,系统会自动更新文件的读指针,使其指向下一次读取的位置。

系统调用:

  • read():从文件中读取数据。
  • pread():从指定偏移量处读取数据,不影响当前文件指针。

4. 文件写入(Write)

文件写入是指向文件中写入数据,将数据存储到磁盘上。

操作步骤:

  • 打开文件: 使用文件描述符打开文件,并指定写入模式。
  • 写入数据: 系统会将数据写入文件的指定位置(或当前写指针位置)。
  • 更新写指针: 写入数据后,系统会自动更新文件的写指针。
  • 更新文件大小: 如果写入的数据超出了当前文件大小,文件系统会扩展文件大小以适应新数据。

系统调用:

  • write():向文件中写入数据。
  • pwrite():向文件的指定偏移量写入数据,不影响当前文件指针。
  • append():在文件末尾追加数据。

5. 文件打开(Open)

文件打开是指将文件与一个文件描述符关联,以便对文件进行后续的读、写操作。

操作步骤:

  • 查找文件路径: 系统通过文件路径查找到文件的目录项。
  • 分配文件描述符: 系统为该文件分配一个文件描述符,标识文件在进程中的打开状态。
  • 设置文件模式: 指定文件的打开模式(如只读、只写、读写、追加等)。
  • 初始化文件指针: 将文件的读写指针初始化为文件的起始位置(或末尾位置,视打开模式而定)。

系统调用:

  • open():打开一个文件并返回文件描述符。
  • fopen():用于C标准库中,以文件指针的形式返回。

6. 文件关闭(Close)

文件关闭是指释放文件描述符,将文件从当前进程中断开,保存文件的状态。

操作步骤:

  • 刷新缓存: 将文件缓冲区中的数据写回磁盘,确保数据一致性。
  • 释放文件描述符: 系统释放文件描述符,使其可以被其他文件或进程使用。
  • 更新文件元数据: 文件系统更新文件的元数据,例如最后修改时间、文件大小等。

系统调用:

  • close():关闭文件描述符,使之失效。
  • fclose():用于C标准库中,关闭文件指针。

总结: