Linux下一切皆文件的理解

这篇具有很好参考价值的文章主要介绍了Linux下一切皆文件的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一. 回顾上文

Linux底层进程和被打开文件的映射关系图:

Linux部分源代码示意图如下:  

​编辑

 二.Linux下一切皆文件的核心理解


一. 回顾上文

        在前两篇文章中,我论述了Linux系统中关于文件基础IO的一些内容:

        1.有关于文件方面的系统调用函数:open、write、read、close等函数,也有C语言库中的fopen、fclose、fputs、fprintf等对文件操作的函数,C语言库中的函数是对系统调用函数底层实现原理的封装和优化;

         2.文件=内容+属性。我们使用的C函数接口对文件的操作只是对其内容进行增删改;而只有使用的chmod、chgrep命令才是对文件的属性操作。

        3.此外了解了Linux下进程与被打开文件的映射关系和底层原理图,发现:进程的结构体中可以关联到文件描述符表的数组,该数组存放着该进程打开的所有文件描述符及其属性;

        4.文件被进程打开,操作系统就要管理该文件,本着先描述再管理的理念,OS为管理每个所文件都创建了一个数据结构:struct file,里面涵盖了该文件的所有属性数据。而进程的结构属性中都会指向一个大结构体:struct file_struct(文件描述符表),里面存放着被进程打开的所有文件。采用一个指针数组将这些文件串起来。在指针数组struct file* fd_array[ ]里面的每个元素都是一个指针,指向各个文件的地址,根据指针就能很快很方便的找到这些文件,并对其进行操作。而这些元素的下标又称为文件描述符fd,fd的值根据数组的索引下标而定。

Linux底层进程和被打开文件的映射关系图:

Linux下一切皆文件的理解

Linux部分源代码示意图如下:  

Linux下一切皆文件的理解


 二.Linux下一切皆文件的核心理解

        Linux下一切皆文件是指,Linux系统中的一切东西全都可以通过文件的方式进行访问或者管理。反过来说,任何被挂在系统中的东西,即使它们的本质并不是文件,也会被OS以文件的眼光来呈现。

        比如:我们经常讲到的进程、磁盘显示器设备等,实际上都不是文件,但是用户可以以文件系统的规范去访问它,修改属性。

        目录的特点就是该目录中包含了各个文件的文件名以及指向这些文件的指针,打开目录就等同于打开文件。

        由上面第4点可知:任何一个被打开的文件,在内核中呈现的结构体对象是struct file类型。

Linux下一切皆文件的理解

 Linux下一切皆文件的理解

      举个例子:在OS中,我们假如对磁盘中的某一文件进行读写操作时,代码中会有系统调用open函数,它的返回值fd描述符会作为指针指向该文件,在进行文件修改操作的过程中,我们会通过进程PCB访问到struct file_struct,进而找到fd指向该文件的struct file结构体中的readp、writep函数指针调用磁盘中相应的读写函数完成修改。

        所以修改文件并不是简单的以为打开文件、修改完内容、关闭文件就完事了。而是需要通过告知OS系统,让它帮你去调用各类指针、函数、结构成员等一系列操作才能完成。文章来源地址https://www.toymoban.com/news/detail-499176.html

到了这里,关于Linux下一切皆文件的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 『Linux从入门到精通』第 ⑲ 期 - 文件描述符及重定向——为何说Linux下,一切皆文件?

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 Linux从入门到精通 ,本专栏主要内容为本专栏主要内容为Linux的系统性学习,专为小白打造的文章专栏。

    2024年02月16日
    浏览(36)
  • Nginx目录结构简介:深入理解Nginx的默认文件和目录

    第一章 Nginx的默认目录结构 当你安装Nginx后,它的默认目录结构如下: 让我们逐个了解这些目录和文件的作用。 第二章 conf目录 conf目录包含了Nginx的配置文件,其中nginx.conf是Nginx主配置文件,它包含了所有全局的Nginx配置项。mime.types文件包含了MIME类型的定义,它告诉Nginx如

    2024年02月13日
    浏览(47)
  • 【Linux】Linux文件目录结构

    在 Linux 中,其文件目录结构是一颗类似于多叉树的结构,所有目录都在 / (根目录)下面,每个非叶节点代表一个目录,叶节点代表文件。 一般结构如下所示: usr :“Unix Software Resource” 的缩写,该目录包含用户使用的应用程序和文件,而不是系统使用的应用程序和文件,例

    2024年02月06日
    浏览(34)
  • Linux查看目录下的文件及根目录文件的解释

    在Linux操作系统当中,文件名不区分后缀,但经常使用后缀来帮助用户区分文件。 语法结构:ls 路径 列出指定目录下的内容,该命令在没有指定要列出哪个选项和参数的时候,默认为列出当前目录下的内容,一本都有默认的(注:默认的情况下不区分文件和目录,注意,在

    2024年02月09日
    浏览(52)
  • linux查看当前目录及子目录所有文件

    1.查看当前目录及子目录所有文件: du -ah 执行结果如下: 2.查看当前目录及子目录所有文件,并根据大小排序: du -a | sort -n 执行结果如下:(单位:字节) 整理完毕,完结撒花~

    2024年02月16日
    浏览(27)
  • Linux文件、目录相关命令

            查看文件、目录属性:ls、stat、file         查看内容:cat、tac(从后往前)、more、less、tail、head                 cat [OPTION] ...[FILE]...                         -E:显示行结束符$                         -n:对显示的每一行进行编号

    2024年02月15日
    浏览(36)
  • linux统计目录文件数量

    1、当前文件夹及子文件夹的数量:         ls -lR | grep \\\"^d\\\" | wc -l 2、当前文件及子目录文件夹的数量:         ls -lR | grep \\\"^-\\\" | wc -l 3、当前目录某文件的数量:         find . -name filename | wc -l 4、当前目录下所有目录文件的list及数量:         find . -name \\\"*\\\" list.txt     

    2024年02月08日
    浏览(33)
  • Linux 文件 & 目录管理 & 链接

                 Linux 系统是一种典型的多用户系统,为了保护系统的安全性,不同的用户拥有不同的地位和权限。Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。              可以使用命令:ll 或 ls –l 来显示一个文件的属性以及文件所属

    2024年02月07日
    浏览(27)
  • Linux 文件与目录管理

    我们知道 Linux 的目录结构为树状结构,最顶级的目录为根目录 /。 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。 在开始本教程前我们需要先知道什么是绝对路径与相对路径。 绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录

    2024年02月13日
    浏览(27)
  • Linux文件系统常见目录

    磁盘是用来存储文件的,但必须先把磁盘格式化为某种格式的文件系统,才能存储,而文件系统,就是用来组织和管理磁盘中文件的这样一种结构。Linux系统有着其独特的文件系统EXT2(演变出EXT3、EXT4,但核心不变),文件系统包括了文件的组织结构、处理文件的数据结构以

    2023年04月24日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包