当前位置: 首页 > news >正文

Linux中如何理解一切皆文件

根据之前的学习我们会有一些少许的疑惑,我们的stdin ,stdout,stderr访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是外设,那么这些外设是怎么被看成是文件的呢?

看图可以知道硬件的上一层链接着一个驱动程序,操作系统通过构建一个struct device 的结构体来描述这一类的外设:

然后每个外设都有一个device这样的结构体对象,操作系统通过链表把这些device连接起来:所以操作系统对设备的管理转化成了对数据结构的增删查改:

然后device中的属性则是由外设的驱动来初始化:

这样将外设结合起来,可以看到他们的属性类别都是一样的,值可以不同,但是IO的方法是不同的,读键盘就是读键盘,读显示器就是读显示器,他们没有任何关系

我们拿键盘举例子,键盘目前只有读取方法,但是没有写方法,往键盘里写东西感觉都是不太对的,所以把写键盘设置为空方法,其他的类推:

可以看到,他们的方法虽然不一样,但是他们都需要有读写,所以在操作系统启动的时候就会创建struct file对象,里面包含了相关文件相关属性等等我们不关心,重点是file里含有两个函数指针,那两个函数指针分别指向外设的read和write方法:

可以看到用函数指针屏蔽了文件硬件的差异

从file的角度来看我们要读写外设,我们就不关心下面的蓝色字体实现的方法,然后从file的角度往上看,我们访问外设,就只关心外设的读和写,甚至不用关系底层的设备是什么,file会自动帮我们找到对应的设备读写。

所以,相当于在操作系统中对外设做了一层封装,让我们看到的一切皆文件:

这一套机制在Linux当中叫vfs(虚拟文件系统)

其中实现这一机制就类似于c++中多态:

之不过c面向过程写的方式不一样。

所以系统是通过什么方式来让我们看到struct file的呢?是通过文件描述符来让进程看到struct file的

相关文章:

Linux中如何理解一切皆文件

根据之前的学习我们会有一些少许的疑惑,我们的stdin ,stdout,stderr访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是外设,那么这些外设是怎么被看成是文件的呢? 看图可以知道硬件的…...

【贪心算法】(第十一篇)

目录 坏了的计算器(medium) 题目解析 讲解算法原理 编写代码 合并区间(medium) 题目解析 讲解算法原理 编写代码 坏了的计算器(medium) 题目解析 1.题目链接:. - 力扣(Leet…...

React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode

文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用:注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…...

深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制

文章目录 前言1. 使用 “Build Trigger”(构建触发器)2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1:任务 A 成功后自动执行任务 B例子2:任务 A 成功后自动执行 Pipeline…...

无人机飞手执照培训为什么需要脱产学习?

无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面: 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入,包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联,需要学员进行系统的学…...

PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程

目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①:对称加密(使用 AES、Blowfish 算法)2.1 密钥2.2 密钥偏移量 三、用法②:PGP加解密3.1 什么是PGP算法?3.2 使用 GPG 生成密钥对3.3 列…...

uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)

1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头,告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…...

解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题

readeck 是一个内容中心,目前已支持中文翻译 这是本地化部署后的效果: 原命令为: docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…...

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景:win11,duilib应用,双显示器,两台分辨率相同,分别设置不同的缩放以后,应用运行以后,程序闪一下消失或者程序还在,但是UI显示不出来。 原因 窗口风格设置不合理,所以…...

零代码快速开发智能体 |甘肃旅游通

在互联网信息爆炸的时代,寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天,我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发,集合了丰富的旅游信息和个性化推荐功能&…...

【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 Artificial Bee Colony(ABC)算法是一种模仿蜜蜂觅食行为的优化算法,它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…...

qt获取本地语言

获取本地语言 #define QSTRING_TO_UTF8(str) std::string(str.toUtf8()) enum LanguageType {kLanguageTypeChinese,kLanguageTypeTradition,kLanguageTypeEnglish };QLocale qlLanguage;QString qstrLangCode qlLanguage.languageToString(qlLanguage.language());LOG(INFO)…...

【Spring篇】Spring中的Bean管理

🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯Spring IOC容器 &#x1f6a…...

UV灯 VS LED灯,LED美甲灯是紫外线灯吗?

美甲灯是使甲油胶固化的重要工具,目前最常用的美甲灯一般是UV灯、LED灯以及CCFL灯。 一、不同的灯之间到底有什么区别呢?这次让我们好好看一下 UV灯: UV灯是紫外线灯管的简称。UV灯属于热阴极荧光灯,发出UVA(长波紫…...

得物App3D博物馆亮相“两博会”,正品保障助力消费体验升级

近日,2024中国体育文化博览会、中国体育旅游博览会(以下简称“两博会”)在苏州国际展览中心盛大开幕。本次展会汇聚了众多国内外体育文化、体育旅游领域的顶尖企业和品牌,共同展示体育产业的发展成果和最新趋势。在C展馆C21展位&a…...

rancher安装并快速部署k8s 管理集群工具

主机准备 准备4台主机 3台用于k8s集群 ,1台用于rancher 每台服务器新增配置文件 vi etc/sysctl.confnet.ipv4.ip_forward 1 刷新生效 sysctl –p 安装docker 安装的时候可以去github上检索rancher看看最新版本适配那个版本的docker,这里安装23.0.1…...

NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置

国标GB28181视频平台EasyCVR视频融合平台可拓展性强、视频能力灵活,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析接入等功能。其中,在语音对讲方面,NVR接入录像回放平台目前…...

八、Linux 系统安全:守护你的数字堡垒

Linux 系统安全:守护你的数字堡垒 在当今数字化时代,Linux 系统因其稳定性、高效性和开源性而被广泛应用于服务器、工作站以及各种嵌入式设备中。然而,随着网络攻击的日益频繁和复杂,确保 Linux 系统的安全变得至关重要。本文将深…...

PTA数据库编程练习合集

10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句&#xff0c; 检索出product表中所有符合40 < Weight < 65的记录。 提示&#xff1a;请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名…...

cua_desktop_operator_cli_skill:用命令行自动化桌面操作的效率利器

1. 项目概述&#xff1a;一个桌面操作员的命令行技能集最近在开源社区里看到一个挺有意思的项目&#xff0c;叫cua_desktop_operator_cli_skill。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你是一个经常需要和电脑桌面、各种应用程序打交道的“操作员”&am…...

芯片设计人才培养:从Sondrel模式看产学合作如何弥合能力鸿沟

1. 项目背景与行业契机最近在整理行业资料时&#xff0c;翻到一篇十多年前的旧闻&#xff0c;讲的是英国一家名为Sondrel的系统级芯片设计咨询公司&#xff0c;与宁波诺丁汉大学合作&#xff0c;启动了一个针对中国学生的芯片设计人才培养项目。这件事发生在2013年&#xff0c;…...

Windows 11安卓子系统WSA:在电脑上流畅运行手机应用的完整指南

Windows 11安卓子系统WSA&#xff1a;在电脑上流畅运行手机应用的完整指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 你是否曾想过在Windows电脑上直接…...

DelphiOpenAI:原生集成OpenAI API,赋能Delphi开发者构建智能应用

1. 项目概述&#xff1a;DelphiOpenAI&#xff0c;一个为Delphi开发者打造的AI桥梁如果你是一名Delphi开发者&#xff0c;看着Python、JavaScript社区热火朝天地集成各种AI能力&#xff0c;自己却苦于没有成熟、好用的原生库&#xff0c;只能望“AI”兴叹&#xff0c;那么今天介…...

物联网安全创业:从技术挑战到市场机遇的深度解析

1. 物联网安全创业的“冷”与“热”&#xff1a;一个从业者的深度观察作为一名在嵌入式系统和网络安全领域摸爬滚打了十几年的工程师&#xff0c;我几乎见证了物联网从概念炒作到遍地开花的全过程。每次和同行、投资人聊天&#xff0c;话题总绕不开两个极端&#xff1a;一边是对…...

2026中小企业OA软件排行榜TOP10(精简版)

2026年&#xff0c;中小企业数字化转型进入深水区&#xff0c;OA软件作为办公协同核心工具&#xff0c;是企业提升效率、规范流程、降本增效的关键支撑。随着SaaS模式普及、AI技术深度应用及信创政策落地&#xff0c;OA市场呈现“头部生态下沉、专业工具崛起、性价比为王”的格…...

使用Taotoken后模型API调用的延迟与稳定性观测体验分享

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后模型API调用的延迟与稳定性观测体验分享 作为一名日常需要与多种大模型API打交道的开发者&#xff0c;模型服务的稳…...

离线语音识别性能提升:Vosk API的3大架构优化策略实践

离线语音识别性能提升&#xff1a;Vosk API的3大架构优化策略实践 【免费下载链接】vosk-api Offline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node 项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api …...

如何在Windows上快速安装安卓应用:APK Installer终极指南

如何在Windows上快速安装安卓应用&#xff1a;APK Installer终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想要在Windows电脑上运行安卓应用&…...

别再只会点灯了!用51单片机和继电器模块,做个智能插座控制台灯(附完整代码)

从点灯到智能家居&#xff1a;51单片机与继电器模块的实战进阶指南 当你已经能够熟练地用51单片机点亮LED灯时&#xff0c;是否想过将这些基础技能转化为实际生活中的实用工具&#xff1f;本文将带你跨越实验板与真实世界的鸿沟&#xff0c;用最常见的51单片机和继电器模块&…...