技术编程|低调的 Linux 文件系统家族( 五 )
最后一个系统调用是 fcntl, 它用来锁定和解锁文件 , 应用共享锁和互斥锁 , 或者是执行一些文件相关的其他操作 。
现在我们来关心一下和整体目录和文件系统相关的系统调用 , 而不是把精力放在单个的文件上 , 下面列出了这些系统调用 , 我们一起来看一下 。
系统调用描述s = mkdir(path,mode)创建一个新的目录s = rmdir(path)移除一个目录s = link(oldpath,newpath)创建指向已有文件的链接s = unlink(path)取消文件的链接s = chdir(path)改变工作目录dir = opendir(path)打开一个目录读取s = closedir(dir)关闭一个目录dirent = readdir(dir)读取一个目录项rewinddir(dir)回转目录使其在此使用
可以使用 mkdir 和 rmdir 创建和删除目录 。 但是需要注意 , 只有目录为空时才可以删除 。
创建一个指向已有文件的链接时会创建一个 目录项(directory entry)。 系统调用 link 来创建链接 , oldpath 代表已有的路径 , newpath 代表需要链接的路径 , 使用 unlink 可以删除目录项 。 当文件的最后一个链接被删除时 , 这个文件会被自动删除 。
使用 chdir 系统调用可以改变工作目录 。
最后四个系统调用是用于读取目录的 。 和普通文件类似 , 他们可以被打开、关闭和读取 。 每次调用 readdir 都会以固定的格式返回一个目录项 。 用户不能对目录执行写操作 , 但是可以使用 creat 或者 link 在文件夹中创建一个目录 , 或使用 unlink 删除一个目录 。 用户不能在目录中查找某个特定文件 , 但是可以使用 rewindir 作用于一个打开的目录 , 使他能在此从头开始读取 。
Linux 文件系统的实现
下面我们主要讨论一下 虚拟文件系统(Virtual File System)。 VFS 对高层进程和应用程序隐藏了 Linux 支持的所有文件系统的区别 , 以及文件系统是存储在本地设备 , 还是需要通过网络访问远程设备 。 设备和其他特殊文件和 VFS 层相关联 。 接下来 , 我们就会探讨一下第一个 Linux 广泛传播的文件系统: ext2。 随后 , 我们就会探讨 ext4 文件系统所做的改进 。 各种各样的其他文件系统也正在使用中 。 所有 Linux 系统都可以处理多个磁盘分区 , 每个磁盘分区上都有不同的文件系统 。
Linux 虚拟文件系统
为了能够使应用程序能够在不同类型的本地或者远程设备上的文件系统进行交互 , 因为在 Linux 当中文件系统千奇百种 , 比较常见的有 EXT3、EXT4 , 还有基于内存的 ramfs、tmpfs 和基于网络的 nfs , 和基于用户态的 fuse , 当然 fuse 应该不能完全的文件系统 , 只能算是一个能把文件系统实现放到用户态的模块 , 满足了内核文件系统的接口 , 他们都是文件系统的一种实现 。 对于这些文件系统 , Linux 做了一层抽象就是 VFS 虚拟文件系统 ,
下表总结了 VFS 支持的四个主要的文件系统结构 。
对象描述超级块特定的文件系统Dentry目录项 , 路径的一个组成部分I-node特定的文件File跟一个进程相关联的打开文件
超级块(superblock) 包含了有关文件系统布局的重要信息 , 超级块如果遭到破坏那么就会导致整个文件系统不可读 。
i-node 索引节点 , 包含了每一个文件的描述符 。
在 Linux 中 , 目录和设备也表示为文件 , 因为它们具有对应的 i-node
?
超级块和索引块所在的文件系统都在磁盘上有对应的结构 。
目录项被缓存在 dentry_cache 缓存中 。 例如 , 缓存条目会缓存 /usr 、 /usr/local 等条目 。 如果多个进程通过硬连接访问相同的文件 , 他们的文件对象将指向此缓存中的相同条目 。
最后 , 文件数据结构是代表着打开的文件 , 也代表着内存表示 , 它根据 open 系统调用创建 。 它支持 「read、write、sendfile、lock」和其他在我们之前描述的系统调用中 。
在 VFS 下实现的实际文件系统不需要在内部使用完全相同的抽象和操作 。 但是 , 它们必须在语义上实现与 VFS 对象指定的文件系统操作相同的文件系统操作 。 四个 VFS 对象中每个对象的操作数据结构的元素都是指向基础文件系统中功能的指针 。
推荐阅读
- 电池技术,相机发烧|防爆相机多少钱能买到?
- 行业互联网|深圳第22届高交会闭幕:一大批新技术新成果集中亮相
- 电池技术|动能转换看烟台|有锂电池的地方就有创为
- 行业互联网|2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
- 行业互联网|英国运输技术论坛发布网络安全标准和指南摘要
- 钉科技|“选择性过滤”太难?方太“死磕”8年突破净水技术
- 中国新闻网|告别各自为营,梧桐车联宣布开放系统“技术底座”
- 腾讯|腾讯举办科学脱口秀X-Talk,聚焦人工智能、基因编辑等前沿技术
- |「推仔说新闻」NVIDIA曝光CPU+GPU加速技术 支持两家处理器
- 产业|清华教授魏少军:信息技术产业是全球GDP增长的主要动力
