美文网首页
Linux系统编程之文件I/O (一点五)

Linux系统编程之文件I/O (一点五)

作者: iMikasa_ | 来源:发表于2021-12-01 13:01 被阅读0次

本篇文章的标题是(一点五),一点五是一和二的过渡部分,本篇文章主要讲一些理论知识,有了这些理论知识的铺垫相信以后的系统编程的学习更为顺畅

再叙文件描述符

通过前面的文章也能了解到,如果程序想要对文件进行I/O操作,那些系统调用API都用到了文件描述符作为参数,可显文件描述符的重要性。所以我们就具体问题具体分析。

查阅了各种资料发现,有三张表,是由内核维护的三个数据结构;分别是进程级的文件描述符表、系统级的打开文件表、文件系统的i-node表

每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针;

内核对所有打开的文件维护有一个系统级的描述表格,有时称之为打开文件表;而这个表中的每一项存储了与一个打开文件相关的全部信息,如当前文件的偏移量、打开文件时使用的状态标志、文件的访问模式、对该文件i-node对象的引用

每个文件系统都会为驻留其上的所有文件建立一个i-node表,经过我的查阅资料发现,i-node表中存放的是文件的一些基础信息以及包含文件具体内容的数据块的指针

其实以上概念只是在我在查阅资料后总结的,仅仅是一些观念,了解一些概念,望不要以偏概全.....

image.png

我先举个例子,为了更容易理解,我现在写个程序要以只写 的方式打开文件a.txt,再写个程序以只读的方式打开a.txt,对应在上图中,就是进程a和进程b都要打开文件系统中的同一个文件,在每个进程都有程序所需的文件描述符(在文件描述符表中),他们找到系统中的打开文件表,找到他们读写数据所需的信息如文件偏移量、文件访问模式、状态标志等,因为他们所要读写的文件是同一个文件,说以他们的i-node 指针是一样的,对应的i-node表项也是所需的哪个,然后找到数据块,读写数据块内的数据;

我们可以通过观察上图发现,进程a中的fd1和fd30都指向了同一个打开文件表项,这个是通过调用dup(),dup2()或fcntl()形成的(文件描述符复制)
进程a中的fd2和进程b中的fd2都指向了同一个打开文件表项,可能是通过调用fork()形成的(进程a与进程b是父子进程)


参考

《Linux/UNIX 系统编程手册》
《Linux C 一站式学习》
https://segmentfault.com/a/1190000009724931
https://www.ruanyifeng.com/blog/2011/12/inode.html
https://www.modb.pro/db/78812
https://zhuanlan.zhihu.com/p/143430585
https://zhuanlan.zhihu.com/p/40604943

相关文章

  • Linux系统编程之文件I/O (一点五)

    本篇文章的标题是(一点五),一点五是一和二的过渡部分,本篇文章主要讲一些理论知识,有了这些理论知识的铺垫相信以后的...

  • Linux/UNIX系统编程手册-文件IO

    Linux/UNIX系统编程手册 [德] Michael Kerrisk 第4章 文件I/O: 通用的I/O模型 ...

  • I/O访问方式

    缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O。在Linux的缓存I/...

  • Linux系统编程之文件I/O (二)

    我们继续学习Linux系统编程,我们书接上文。 复制文件描述符 我们都知道,文件描述符是找到每个打开文件的关键,我...

  • Linux系统编程之文件I/O (一)

    本文算是入门系统调用,以文件io为起点,研究系统调用的API,包括打开文件、关闭文件、从文件中读取数据和向文件中写...

  • 网络优化

    网路I/O 1、I/O模型 “一切皆文件”,Linux内核会把所有外部设备看做一个文件来操作,在网络I/O中系统对...

  • linux I/O5中模型认识

    linux I/O5中模型 引入I/O模型 标准I/O: 缓存 IO 又被称作标准 IO,大多数文件系统的默认 I...

  • 文件I/O(一)

    本文转载自实验楼:文件I/O(一) Linux系统调用 Linux系统调用(system call)是指操作系统提...

  • Linux中的IO模型

    Linux五种IO模型 blocking I/O nonblocking I/O I/O multiplexing...

  • UNIX 文件I/O

    UNIX 文件I/O 引言 介绍UNIX系统可用的文件I/O函数---打开文件、读文件、写文件等 UNIX文件I/...

网友评论

      本文标题:Linux系统编程之文件I/O (一点五)

      本文链接:https://www.haomeiwen.com/subject/llorxrtx.html