Linux系统编程-通用文件模型

本文介绍了Linux系统中的文件模型,包括文件类型如普通文件、目录、特殊文件等,强调了文件描述符在Linux中的重要性,以及通用文件模型如何允许统一的I/O操作。此外,文章还探讨了文件描述符、打开文件表、i-node表之间的关系,并通过实例说明了不同进程打开同一文件的情况。
摘要由CSDN通过智能技术生成

目的:

学习 Linux 文件模型相关的知识。
正文目录:

  1. Linux 的两大抽象

  2. 文件类型

  3. 文件描述符

  4. 通用文件模型:简介
    4.1 演示 demo
    4.2 相关要点: 与 VFS 的关系

  5. 通用文件模型:文件描述符和打开文件的关系
    5.1 相关的内核数据结构
    5.2 列举几种打开文件的情景

  6. Linux 的两大抽象
    文件是 Linux 系统中最基础最重要的抽象。Linux 遵循一切皆文件的理念。很多交互操作是通过读写文件来完成,即使所涉及的对象看起来并非普通文件。
    另外一大抽象是进程。如果说文件是 Linux 系统最重要的抽象概念,进程则仅次于文件。
    进程相关的实现复杂且多变,而文件 IO 的实现则相对稳定很多,且更贴近我们的日常操作,所以 以文件作为学习 Linux 内核的切入点是个更好的选择。

  7. 文件类型
    Linux 系统的大多数文件是普通文件或目录,但是也有另外一些文件类型,具体包括如下几种:

普通文件 ( regular file )。
最常用的文件类型,包含了某种形式的数据。至于这种数据是文本还是二进制数据,对于 Linux 内核而言并无区别。
文件中包含的字节可以是任意值,可以以任意方式进行组织。在系统层,除了字节流,Linux 对文件结构没有特定要求。
对普通文件内容的解释由处理该文件的应用程序进行。
文件虽然是通过文件名访问,但文件本身其实并没有直接和文件名关联。相反地,与文件关联的是索引节点 (inode,是index node 缩写)。针对驻留于文件系统上的每个文件,文件系统都会为其分配一个 inode。inode 中会保存和文件相关的元数据,如文件修改时间戳、所有者、类型、长度以及文件数据的位置,但不含文件名,文件名由目录文件负责。
inode 由 inode number 来标识,可以通过 “ls –li” 查看文件的 inode number。

ls -li minicom.log

12582945 -rw-r–r-- 1 root root 665 Jul 10 18:47 minicom.log
目录文件 ( directory file )。
目录也是一种文件类型,这种文件包含了其他文件的文件名以及 inode number。文件通常是通过文件名从用户空间打开,目录用于提供访问文件时需要的名称。
文件名和 inode 之间的配对称为链接 (link)。映射在物理磁盘上的形式,如简单的表或散列,是通过特定文件系统的内核代码来实现和管理的。
如果用户空间的应用请求打开指定文件,内核会打开包含该文件名的目录,然后根据文件名获取 inode number。通过 inode number 可以找到 inode。inode 包含和文件关联的元数据,其中包括文件数据在磁盘上的存储位置。
硬链接 ( hard link )。
不同的文件名可以链接到到同一个 inode。当不同名称的多个链接映射到同一个索引节点时,我们称该链接为硬链接。
硬链接通常要求链接和文件位于同一文件系统中。
在底层文件系统支持的前提下,也只有超级用户才能创建指向目录的硬链接。

符号链接 ( symbolic link )。
符号链接是对一个文件的间接指针,它与硬链接有所不同,硬链接直接指向文件的 inode。引入符号链接的原因是为了避开硬链接的一些限制。
硬链接不能跨越多个文件系统,因为 inode number在自己的文件系统之外没有任何意义。为了跨越文件系统建立链接,Linux 系统实现了符号链接。

特殊文件 (specia

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值