码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 导师问我打开句柄fd和没有打开的差异在哪里?


    大家好

    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

  • 相关阅读:
    [⑤ADRV902x]: TES (Transceiver Evaluation Software) 使用
    python编写小游戏之三入最最简陋简单贪食蛇编写
    @Cacheable 注解(指定缓存位置)
    流體小球加載動畫
    【工作技术栈】【源码解读】一次好奇心:单例模式下的ThreadLocal为什么要使用volatile和synchronized?
    性能测试面试题总结(答案全)
    IDEA中debug启动报错Method breakpoints may dramatically slow down debugging
    【数据结构】队列实现+层序遍历详解+一些练题
    mybatis-plus雪花算法增强:idworker
    Java基础跨平台性,JVM的介绍,JAR,JDK的区别
  • 原文地址:https://blog.csdn.net/weiqifa0/article/details/126736653
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号