文件IO详解(三)---Linux虚拟文件系统

http://blog.chinaunix.net/uid-14735472-id-2921377.html

讲解虚拟文件系统的一些数据结构以及之间的关系,有些地方看不懂

http://www.docin.com/p-941544538.html

讲解了进程打开文件时内核所建立的各种数据结构之间的联系

在给磁盘分区后,每个分区中都可以建立起各自独立的文件系统,建立的物理文件系统可以是相同的,也可以是不同的。那么不同的物理文件系统的组织数据的方式肯定是不同的,比如说ext2文件系统组织数据的方式是靠着superblock块、inode块以及block块三种基本单位,但是其他文件系统比如FAT文件系统对数据的组织方式肯定就不是这样。那么这就意味着不同文件系统的底层驱动程序肯定是不一样的。

那么问题就来了,当我们使用这些文件IO函数对文件进行操作的时候,其实我们并没有关心说不同磁盘分区上的文件系统是不是一样的。对于所有的文件系统我们都是使用相同这些接口去操作文件。

我们之所以能够这样,是因为在应用程序和物理文件系统中间还有一层虚拟文件系统,虚拟文件系统的作用就是向应用程序去屏蔽底层各个不同文件系统之间的操作,为应用程序提供一个统一的接口。

虚拟文件系统的主要包括有superblock结构体,inode结构体、dentry结构体、file结构体。superblock结构体对应文件系统中的superblock

inode结构体对应文件系统中的inode

dentry结构体对应文件系统中的目录项

file结构体为了表示一个打开的文件

时间: 2024-12-24 01:37:19

文件IO详解(三)---Linux虚拟文件系统的相关文章

文件IO详解(一)---ext2文件系统详解

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/26/2609649.html 讲解ext2整体的文件布局 http://www.cnblogs.com/peon/archive/2011/06/22/2086470.html 用实际磁盘中的数据来印证ext2文件系统的布局 磁盘存储数据的最小单元是扇区(Sector):ext2文件系统存储结构的最小单位是块(Block). ext2文件系统中文件的物理存储结构有三个基本组成部分:superb

文件IO详解(五)---open函数详解

open函数用来在进程中打开文件,如果成功则返回一个文件描述符fd. ======================================================= 函数原型: 函数参数: pathname:打开文件的路径名 flags:用来控制打开文件的模式 mode:用来设置创建文件的权限(rwx).当flags中带有O_CREAT时才有效. 返回值: 调用成功时返回一个文件描述符fd 调用失败时返回-1,并修改errno ==========================

文件IO详解(十)---文件共享(多进程之间、单进程之间)

在同一个进程中,实现文件共享的方法有两种: 多次使用open函数打开相同文件 使用dup/dup2函数或者fcntl函数 ======================================================== 对于第一种方法: 每次使用open函数打开文件时,操作系统内核中都会创建一个不同的文件表项(struct file结构体),但是这些不同的struct file结构体最终都会指向同一个struct inode结构体,因为一个文件只能对应唯一的一个struct in

文件IO详解(七)---lseek函数详解

lseek函数用来设置当前文件偏移量. ====================================================== 函数原型: 函数参数: fd:要操作的文件描述符 offset:基于whence参数的偏移量 whence:参考点位置 返回值: 调用成功时返回当前相对于文件开头的偏移量,以字节为单位 调用失败时返回 -1,并修改errno的值 ======================================================= when

标准文件IO详解(三)---缓冲区详解

标准文件 IO 相比于文件 IO 来说,在用户层中增加了一个用户缓冲区.也就是说在使用标准IO 来操作文件的时候,都会经过此用户层的缓冲区.比如使用标准 IO 来向文件中写入内容的时候,首先内容会首先被写入到用户缓冲区中,等到 缓冲区满 或者 刷新缓冲区 的时候在调用文件 IO 将内容写入到内核中的磁盘缓冲区中. ==================================================== 用户缓冲区的类型: 全缓冲 此种类型的缓冲只有在缓冲区满的时候才会调用实际的文

文件IO详解(四)---标准输入、标准输出和标准错误

每个进程都会默认打开3个文件描述符,即0.1.2.其中0代表标准输入流.1代表标准输出流.2代表标准错误流.通常标准输入流对应着键盘的设备文件.标准输出流和错误流对应着显示器的设备文件.在编程中通常使用宏STDIN_FILENO.STDOUT_FILENO和STDERR_FILENO分别来代表0,1,2. 要注意一点: 0.1.2这三个文件描述符对应的是标准输入流.标准输出流和标准错误流而不是键盘设备文件和显示器设备文件.只是默认标准输入流对应着键盘设备文件,标准输出和错误对应着显示器设备文件.

文件IO详解(十七)---ioctl函数详解

Linux提供了 fcntl 函数来获取到文件的控制标志,同时也提供了 ioctl 函数来获取或者设置一些设备文件的特有属性,比如串口的波特率,显示屏的分辨率等等.文件的控制标志是所有类型的文件都会有的,而特有属性则不一定. ======================================================= 函数原型:注意此函数是 ioctl ,而不是iocntl 但是 ioctl 函数相比于 fcntl 函数比较特别的地方就是由于每种设备文件的特有属性都是不一样的,

文件IO详解(十五)---sync、fsync和fdatasync函数详解

在使用write函数向文件中写入数据的时候,并不是在调用了函数后数据就被写进了磁盘,操作系统在内核中设置了一块专门的缓冲区,数据会先被写入到内核的缓冲区中,等到缓冲区满了或者系统需要重新利用缓冲区的时候才会将此缓冲区排入到写队列中去,待到达队首的时候,将数据真正写入到磁盘当中.这就是延迟写,延迟写会造成缓冲区中的数据和磁盘中的数据之间的不同步. ======================================================= sync函数原型: fsync和fdat

(待续)文件IO详解(十六)---fcntl函数详解

fcntl函数是用来在进程中实现对文件的多种操作的函数,通过不同的命令可以实现不同的操作.常用的操作有复制文件描述符.为文件设置建议锁和获取设置文件控制标志等. ======================================================= 函数原型: ======================================================= 操作一:复制文件描述符实现文件共享 函数参数: fd:要操作的文件描述符 cmd:F_DUPFD ar