导师问我打开句柄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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之Boost准标准库配置

下载安装 进入官网下载地址:https://www.boost.org/users/download/ 本教程直接下载官方已编译库,不涉及源代码手动编译 点击官方编号好的链接,然后进入一个下载地址:https://sourceforge.net/projects/boost/files/boost-binarie…

利用HTML中的XML数据岛记录浏览

html文件&#xff1a;shop.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <me…

测试一下你对IP地址的掌握水平(网管面试时会用到)

以下内容摘自《网管员面试宝典》一书。测试一下你对IP地址的理解能力&#xff0c;大家先不看题后的解答&#xff0c;看自己能做出多少题。网管面试时会用到的。面试题1&#xff1a;以下说法正确的是&#xff08; &#xff09;。A. C类地址就是局域网用的IP地址 B. A类地址的网…

中秋的秋

又是一年中秋中秋是比较特别的节日&#xff0c;因为每一年的中秋&#xff0c;我和小云总是能遇到各种事情而分开「当然今年不会」。去年的时候&#xff0c;我们因为要赶项目&#xff0c;所以中秋申请了加班&#xff0c;要申请加班的那天我还是挺不情愿的&#xff0c;然后旁边的…

工作和异地,都是生活的考验

12年毕业的我&#xff0c;应该没有人比我更懂异地恋了。12年毕业拿了一份上海的ARM底层开发offer&#xff0c;薪资不算高&#xff0c;不过我们那一年竟没有一个拿到比上一届师兄薪资好的offer&#xff0c;我那时心里郁郁发闷&#xff0c;女朋友那时候考公务员&#xff0c;我们没…

用临时表的GridView分页

本例子采用sql2000下的Nowthwind数据库中的[Order Details]表 下面是存储过程脚本 Code1ALTER PROC OrderDetailsPaging 2(PageIndex int,--页码 3 PageSize int,--页尺寸 4 RowsCount int output)--总行数 5AS 6BEGIN 7set nocount on 8declare PageLowerBound int 9declar…

HTML与CSS(图解6):超链接

动态的超链接&#xff1a; <html> <head> <title>动态超链接</title> <style> <!-- body{background:url(bg9.gif); /* 页面背景图片 */margin:0px; padding:0px;cursor:pointer; /*意思就是鼠标指针变成 手 的形状&#xff0c;和放到链…

keil分散加载文件浅析

什么是分散加载文件分散加载文件&#xff08;scatter file&#xff09;是一个文本文件&#xff0c;它的作用是可以用于描述 ARM 链接器生成映像文件所需要的信息。如果不使用 scatter file 文件来指定&#xff0c;那么 ARM 链接器会按照默认的方式来生成映像文件&#xff0c;但…

socket buffer套接字缓存

最近公司在开发机器人与服务器调度端的通信时需要使用socket&#xff0c;因此找到了该文章作为深刻理解socket内部运作。 Linux网络核心数据结构是套接字缓存(socket buffer)&#xff0c;简称skb。它代表一个要发送或处理的报文&#xff0c;并贯穿于整个协议栈。 1、 套接字…

LAMP 系统性能调优,第 3 部分: MySQL 服务器调优(转)

关于 MySQL 调优 有 3 种方法可以加快 MySQL 服务器的运行速度&#xff0c;效率从低到高依次为&#xff1a; 替换有问题的硬件。对 MySQL 进程的设置进行调优。对查询进行优化。迁移到 DB2? 您正在寻找一种干净利落、无成本的方法用来从 MySQL 迁移到 IBM? DB2? 吗&#xf…

圆梦,手写了个操作系统

大家好&#xff0c;我是发哥。我不止一次在公众号上强调学习操作系统的重要性。至于学习的方法&#xff0c;无外乎看书、看视频、看源码等等。也有推荐过跟着老师一起手写操作系统&#xff0c;但很少有学习方法能同时兼顾以下三点&#xff1a;1、Linux内核2、Windows内核3、自己…

安卓打包apk

打apk包的环境依赖 1.jdk 2.sdk 3.ndk 打apk包的工具 gradle mkdir /usr/local/Android cd /usr/local/Android mkdir sdk gradle ndk 1.jdk安装 略 2.sdk安装 https://www.androiddevtools.cn/下载地址 cd /usr/local/Android/sdk wget https://dl.google.com/android/andro…

你知道怎么衡量硬件设备的算力吗?

前几天在知乎上看到有知友提问&#xff0c;什么是 GPU 算力。当时简单回答了一下&#xff0c;今天有空&#xff0c;在这里详细谈谈算力。算力也是做高性能计算的核心概念和指标。设备算力分为两部分&#xff0c;其一是设备&#xff0c;其二是算力。设备主要是指 CPU、GPU、DSP、…

Python爬虫入门教程 22-100 CSDN学院课程数据抓取

1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了&#xff0c;选择恐惧症使得我不知道该拿谁下手&#xff0c;找来找去&#xff0c;算了&#xff0c;还是抓取CSDN学院吧&#xff0c;CSDN学院的网站为 https://edu.csdn.net/courses 我看了一下这个网址&#xff0c;课程数量…

UML类图解义 (来自《大话设计模式》)

为什么80%的码农都做不了架构师&#xff1f;>>> 小菜&#xff1a;“对了&#xff0c;我时常在一些技术书中看到这些类图表示&#xff0c;简单的还看得懂&#xff0c;有些标记我很容易混淆。要不你给我讲讲吧。” 大鸟&#xff1a;“这个其实多看多用就熟悉了。我给…

易写易库(EXEK)玩“花”儿之三:命令有图标支持库,附图

释题&#xff1a;如果您认为这个“花”儿&#xff0c;属于之前第一个“花”儿的变种&#xff0c;易语言写支持库也能玩出“花”儿来&#xff08;易写易库(EXEK)进展5&#xff09;&#xff0c;我也不反对。 在开始正文之前&#xff0c;我要首先回答我之前提出的两个问题&#xf…

您好,有什么嵌入式书籍推荐的?

回答下这个后台的留言-----比较推荐下面这个仓库里面的内容&#xff01;https://github.com/ZhongYi-LinuxDriverDev/CS-EmbeddedLinux-Book#%E5%85%A8%E9%83%A8%E6%B1%87%E6%80%BB

VS2017打开低版本的VS MVC架构的项目的时候需要修改的地方

1、需要修改的是.sln文件&#xff0c;即将里面的 Version改为12&#xff0c;其中的VS的版本改为2017 2、项目中后缀名为 .csproj中的代码改一下&#xff1a; 转载于:https://www.cnblogs.com/zhijianhao/p/10253572.html

从外部的js文件中获取ASPX页面的控件ClientID(get control reference from external javascript)...

前言 当使用MasterPage、UserControl等容器时&#xff0c;为了避免控件的重复命名&#xff0c;asp.net会自动将容器中的控件生成一个ClientID&#xff08;Control Tree中的可生成&#xff0c;否则不会生成&#xff09;。 例如&#xff1a;ContentPlaceHolder1中的Button1默认情…

可怕!CPU暗藏了这些未公开的指令!

我们平时编程写的高级语言&#xff0c;都是经过编译器编译以后&#xff0c;变成了CPU可以执行的机器指令&#xff1a;而CPU能支持的指令&#xff0c;都在它的指令集里面了。很久以来&#xff0c;我都在思考一个问题&#xff1a;CPU有没有未公开的指令&#xff1f;或者说&#x…