定义: VFS(Virtual File System),是异构文件系统之上的软件粘合层。通过 VFS 可以为访问文件系统的系统调用提供统一的抽象接口,实现无缝使用多个不同类型的文件系统。
-
不同文件系统不是通过设备标识符访问,而是连成一个单一树型结构,用一个根目录表示文件系统;
-
文件系统按需挂载在 Linux 虚拟文件系统;
-
采用标准的 UNIX(POSIX)系统调用读、写位于不同物理介质上的文件系统;
-
用户很容易地在不同文件系统之间进行数据交换和管理,并在 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库让操作系统为其提供文件访问等服务。
-
文件流和文件描述符
-
文件流: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
-
带缓冲区的文件操作:在用户空间中,自动的由操作系统为你正在使用的文件开辟内存缓冲区
非缓冲区的文件操作:用户只有在需要的时候,自行为正在使用的文件开辟内存缓冲区