Linux系统支持各种各样的文件系统格式,如ext2、ext3、FAT、NTFS,ISO9660(CD-ROM文件系统)等等,不同的磁盘分区、光盘或者其它存储设备都有不同的文件系统格式,然而这些文件系统都可以挂载到系统的某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们使用ls命令看起来是一样的,读写操作用起来也是一样的,这是怎么做到的呢?linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual Filesystem)。如下图所示:
值得说明的是close(fd),只是文件结构体引用计数减一,当其值为0 的时候,内核才释放file文件结构体。