Linux下,一切皆文件

前言

本篇文章在于浅谈一下 Linux下,一切皆文件 这个理念


引入概念

大家应该都知道,键盘是属于程序的标准输入,而显示器是标准输出。先讲理念: Linux下,一切皆文件!!

讲到这里,可能有人要说了,哎哎哎,那键盘显示器哪是文件呐,你这不胡扯?!不急,且听我慢慢道来

大家应该清楚一个概念:只要是文件,无外乎就是读 和 写 !!

然后我们再代入到键盘,显示器、文件当中。
键盘呢,只有读操作,没有写操作吧?(总不能往键盘写入什么数据吧??)
显示器呢,只有写操作,没有读操作。(总不能往显示器读取什么数据吧??)
而文件呢,一般情况下,只要不去改它的权限,基本都是可读可写的。

再然后呢,我们需要清楚,既然是不同的事物,那么它就一定具备它自己的方法!它们的读写方式都是不一样的!
键盘,需要有自己读取数据的方法吧?(我们平时从键盘读取数据,不就是从键盘读取吗)
显示器,需要有自己数据写入的方法吧?(我们平时的显示器打印,不就是往显示器写入吗)


理解

那讲了这么久,Linux下一切皆文件,它是怎么做到的呢???(只是帮助大家去理解的层面 讲解的该理念,不是技术层面的讲解)

键盘、显示器、普通文件,完完全全就是三样不同的东西吧??差异化很大吧??

但是呢,计算机科学里面有这么一句话,叫做,差异化再怎么不同的底层事物,都可以通过添加一层软件封装,来解决底层的差异化。

下面我将举两个例子,来帮助大家理解 Linux下,一切皆文件 这个理念。

a、如果学过c++的多态的伙伴,应该就可以很好的理解了。每一个事物,都会被封装称一个类 class File。然后呢,实例化出不同的对象 File 键盘,File 显示器,File 文件,但是类中的方法都是一样的!而多态的加入,让同一个事物 所实例化出来的对象 在实现相同的方法的时候,可以有所不同!!(也就是对相同的函数进行重写)。
===》
然后我们再进行类比,键盘,显示器,普通文件,就好比是同一个类 实例化出来的 不同对象。那我们是不是可以认为,不管是键盘、显示器、文件这些不同的事物,都可以统一被当作 File 这样的一个类来看待呢?? 而这个类当中,有着它们共同的属性(读写操作),它们在类中的方法名都是一样的,就是 读操作 和 写操作 这两个方法,而多态又支持了 不同对象 不同的实现方式。因此实现了,在底层往上层看待的角度上,不关心底层是如何实现的,那我们就都是一样的,(不同的事物,被统一看待成 file 这样的类,类中的函数方法名称也都一样,在用户看来,那就是一模一样的东西),那么就叫做Linux下,看待所有的底层事物差异,都是一切皆文件!!!

如果看不懂上面的例子,没关系,我还有例子!

b、如果不了解c++多态的伙伴们,也总学过 c 语言的结构体 和 函数指针了吧?
键盘、显示器、文件,这三样,明明看起来就是不同事物,但是它们却都存在相同的功能(读写操作),那么我们就可以定义一个结构体 strcut file,然后再通过该结构体,定义出不同的变量 strcut file 键盘, strcut file 显示器, strcut file 文件。然后每一个结构体里面存放两个函数指针(一个读操作,一个写操作),那这样,每个变量的函数指针,就可以指向 各自实现读写操作的 函数方法,进而实现不同的读写方式。
===》
那有人要问啦!那你这,哎哎哎,还要指向各自的实现读写操作的函数,那你这是何必呢??
当然有必要啦!我们所谈及的 让函数指针 再去指向各自实现读写操作的函数方法,进而让不同的事物实现不同的读写操作。但可别忘了,这里的函数指针,是被封装在一个结构体当中的!!那么,这个结构体所定义出来的 不同的变量 它们(函数指针)的名字也是一样的!!!
===》
所以,在底层角度,我们是这样实现,不同事物,通过一个结构体进行封装成同一个事物,然后这几个不同的事物又分别通过 类似函数指针的方法,去调用各自的读写操作的方法。但是,记住了,这是在底层的角度!!! 那么在上层(用户层)呢???
==》
在上层的角度,不管键盘、显示器、普通文件,我们就是被同一个结构体 file 所定义出来的不同的变量!!!那我们是不是可以认为,不管是键盘、显示器、文件这些不同的事物,都可以统一被当作 file 这样的一个结构体来看待呢?? 我们直接采用同样的方法(在结构体的视角),函数名都一样,然后去调用 底层不同的 读写操作的实现方法,但是从底层往上层看,我们都是一样的(结构体是一样的,函数名是一样的),那么就叫做Linux下,看待所有的底层文件,都是一切皆文件!!!


原因

可能又要有人问了

那…为什么Linux要这样设计呢???

答案是:简单理解的话,那就是为了以统一的方式,去处理 各种各样 具有差异化的 复杂的事物!!!让上层(用户层)操作方便、简单、有效率!

假如我今天要用键盘读写,我需要去学习键盘的读写方法,明天我要用文件读写,我又得重新去学习新的方法,再后天,我需要去学习怎么写入到显示器。那么这样,对上层用户,就非常不友好!!!所以呢,才有了这么一套理念:Linux下,一切皆文件!!!


总结

我们先是通过 键盘、显示器、文件这三样不同的事物各自所具备的类似的功能,而每个功能的实现方法 或 实现方式 又不一样,来引入今天的话题。随后我们通过 C++的类和对象、多态等举例,帮助大家理解了为什么Linux下有一切皆文件这个理念!!然后再通过 C 的结构体和类似函数指针这样的功能 来理解 底层和上层 看待不同事物的时候的有所差别。而过添加一层软件封装,来解决底层的差异化,然后来让上层用户,在看待不同事物的时候,又能以同样的眼光或者理念去看待这些事物,就如同,不同事物,在C++都会被统一看待成某一个类,在 C 都会被统一看待成某一个结构体。最后我们简单讲述了为什么要这样设计,无外乎就是,用户至上的理念!

OK,本章的基本指令就讲到这。如果能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕ 支持一下!
感谢各位观看!!

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值