简单理解Linux中的一切皆文件

一款操作系统要管理各种各样不同的硬件,因为硬件的不同所以它们使用的文件系统也不同。但是按道理来说,文件系统的不同对于用户来说可不是一件好事,操作不同的硬件就要使用不同的方法。

但是Linux有一切皆文件。

简单来说,Linux把所有不同的文件系统都抽象成同一个"对象",用户使用这一个"对象"就可以对底层不同的文件系统进行操作。

所以Linux中的一切皆文件,从面向对象的角度来说就是多态。但是Linux是用C写的,所以说它是多态是不准确的(因为C不是一门面向对象的语言),但是作为Linux的使用者确实感受到了多态这一特性。

多态是什么?多态就是同一种操作方法放在不同的对象上,这些对象有不同的响应行为。即,使用统一的接口来处理不同的对象。

所以理解一切皆文件的本质就是搞清楚Linux对文件系统的管理是怎么做到"多态"的?

Linux管理的硬件可能有键盘、网卡、显示器、磁盘等等,这些硬件呢会有配套的驱动程序,这些驱动程序当中会有让硬件执行某个操作的方法。所以使用者想使用这些硬件的时候,实际上是在"向Linux求助",让Linux去调用这些硬件的驱动程序当中用户指定的操作方法。

因为硬件五花八门,所以驱动程序各不相同。所以Linux想出了一个办法:

你们这些硬件不是有驱动程序么?驱动程序不是有控制硬件行为的方法么?那我就把你们这些操作方法全都给汇聚起来,然后再添加一些东西,封装成一个struct_file结构体

至此Linux内核当中,就存在了一个汇聚所有文件系统的操作信息("汇聚"一词是不准确的,应该是抽象)。画一张图想必就明白了:

 

 这幅图描述了Linux管理文件系统的大概过程。

Linux在内核当中创建struct_file结构体,该结构体里面有众多字段,例如文件的类型、状态以及对应文件系统的操作方法的函数指针(如果没有则为空指针)等等字段。

那么用户在使用read()、write()等系统调用时,Linux会根据用户传入的信息去确认使用哪个struct_file,从而操作正确的硬件。

因为一切硬件、文件系统,在Linux当中都是struct_file结构体对象, 所以在Linux下一切皆文件。

因为Linux做出了抽象,那么这个抽象层有一个专属的名词,叫做VFS(虚拟文件系统),VFS使得用户可以直接使用read()、write()等系统调用而无需考虑具体的文件系统和实际的物理介质。

本篇文章只是对这些知识一个简单的理解,实际上Linux做的工作比这复杂的多得多。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙向钱进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值