您当前的位置: 首页 > 

导师问我打开句柄fd和没有打开的差异在哪里?

发布时间:2022-09-06 07:44:30 ,浏览量:0

大家好

8461c0779acaa7d8854ddf90f58ac128.jpeg

昨晚看到一个同学在群里提问,想简单回答这个问题,我的答案可能不是最全面的,文章最后的两篇技术文大家可以看看,大家也可以说下自己的看法。

fd的发明我觉得是计算机的一个壮举,因为对于应用程序来说,只要拿到了fd就可以对磁盘进行操作了,发明计算机操作系统的人简直就是一个天才。

Linux一个计算机内核,计算机都是以任务的形式存在的,所以对于用户来说,我们能看到的一定是一个个不同的任务。

然后一个任务「线程、进程」,才会实际去事情,比如打开一个文件,然后这个文件fd就会关联上磁盘上的某个位置,fd对对应一个struct file结构体,这个结构体描述了这个文件的很多信息,比如文件的路径、读写的位置、权限、谁操作过它等等。

8f7a2fe7dd7820295759dae232345ba4.png

我觉得看了这个图应该可以回答上面提出的问题了,只有从操作系统拿到了句柄fd,才能链接到磁盘上的文件系统的某个文件和数据,才可能对它进行读写。

c06406f69b9be23556ba56716ca8928e.png

Linux有一个思想「一切皆文件」,其实是想把一些模糊的东西,对用户不友好的东西,都用文件的形式表现出来,如果所有的操作都可以通过打开文件,操作它,那真的是非常完美的。

这是一种思想,可以认为是面向对象的思想!

这样就不难知道,为什么我们写驱动都会有一个file_operation结构体

如果设计不是如此,那么应用需要拿到驱动的数据,就需要用其他非标准的接口,这个可以参考一些rtos的实现,没有文件系统的rtos如果做到标准化就会有很多私有的接口,比较经典的可以看看liteos。

3d969bc34716ab7531f624c6f1edfb78.png

什么叫做硬件抽象层,就是把设备的数据给应用去使用「同类设备的hal层接口相同」,看了这些,还是觉得Linux比较美妙。

这也是需要驱动创建设备文件mknod的原因。

参考两篇文章:

https://jishuin.proginn.com/p/763bfbd56679

https://mp.weixin.qq.com/s/hLq7Pp8CkJD9B-Xqym50dA

cdfc3396595eab3fd6b4ae2f03ea943e.jpeg

23b7188dfbd18c6e65552cc16ede68d6.gif

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109966博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0479s