Skip to content

Latest commit

 

History

History
103 lines (56 loc) · 3.07 KB

虚拟文件系统.md

File metadata and controls

103 lines (56 loc) · 3.07 KB

「 虚拟文件系统(VFS) 」


  定义: VFS(Virtual File System),是异构文件系统之上的软件粘合层。通过 VFS 可以为访问文件系统的系统调用提供统一的抽象接口,实现无缝使用多个不同类型的文件系统。

💬 虚拟文件系统的特点

  1. 不同文件系统不是通过设备标识符访问,而是连成一个单一树型结构,用一个根目录表示文件系统;

  2. 文件系统按需挂载在 Linux 虚拟文件系统;

  3. 采用标准的 UNIX(POSIX)系统调用读、写位于不同物理介质上的文件系统;

  4. 用户很容易地在不同文件系统之间进行数据交换和管理,并在 Linux 上任意挂载多种不同类型文件系统。

  • 例1: cdrom 在 Linux 中的挂载:

     mount -t iso9660 /dev/cdrom /mnt/cdrom
  • 例2: nfs 在 Linux 中的挂载:

     mount -t nfs 127.0.0.1:/mnt/nfs /mnt/nfs

💬 文件的访问方式

  • 系统调用——非缓冲文件操作

    • 基于POSIX(Portable Operating System Interface)标准,采用C语言,实现了为应用程序提供与操作系统内核通信的服务API.

    • 为用户提供有关操作系统的设备管理、I/O 系统、文件系统和进程控制、通信及存储管理等方面的功能.

  • ANSI C库函数——缓冲文件操作

    • 程序员在编程时,利用 C库让操作系统为其提供文件访问等服务。

💬 POSIX 文件访问调用

  • 文件流和文件描述符

    • 文件流:stdin、stdout、stderr

    • 功能1:实现不同输入输出格式转换

    • 功能2:缓冲功能,将数据读写集中,减少系统调用次数(查看——isbuff.c、设置——setbuff.c)

      • 全缓冲区:在缓冲区满或者调用刷新函数后,进行I/O系统调用。

      • 行缓冲区:遇到换行符或缓冲区满,才I/O系统调用。

      • 无缓冲区:例如标准出错流。

    • 文件描述符:0、1、2

  • 文件描述符和文件流的相互转换

    • 函数名:fileno

    • 头文件:stdio.h

    • 原型声明:int fileno(FILE *stream);

    • 形参:stream:文件流

    • 返回值:调用成功,返回文件流所使用的文件描述符;否则,返回 -1

    • 相关例子:fileno.c


    • 函数名:fdopen

    • 头文件:stdio.h

    • 原型声明:int fdopen(int filddes, const char *mode);

    • 作用:在一个已打开的文件描述符的基础打开一个文件流

    • 形参:

      • fildes:文件描述符

      • mode:打开文件流的模式与 fopen 一样

    • 返回值:调用成功,返回一个新的文件流指针;否则,返回 NULL

    • 相关例子:fdopen.c

带缓冲区的文件操作:在用户空间中,自动的由操作系统为你正在使用的文件开辟内存缓冲区

非缓冲区的文件操作:用户只有在需要的时候,自行为正在使用的文件开辟内存缓冲区

- End -