Linux——什么是文件描述符

news2024/12/22 18:23:05

目录

前文

一,为什么有文件描述符

二,什么是文件描述符

2.1 文件操作接口

 2.2 文件描述符

 三,文件描述符的原理

四,文件描述符的分配规则


前文

本文主要是详解一下文件描述符,我们从1.为什么?2.是什么?3.实现原理三个方面来解释。

一,为什么有文件描述符

在语言和系统的学习中,IO流的学习是绕不开的,在其中我们会学到文件的打开,关闭,读取,写入等操作,而在这里面当文件被系统打开后,要怎么管理这些打开的文件呢?这时候就需要用到文件描述符来管理这些被打开的文件。

二,什么是文件描述符

2.1 文件操作接口

首先在C语言的库中有一系列的文件操作函数,如fopen(打开),fclose(关闭),fputs(写入),fgets(读取),众所周知语言层面的库是通过封装操作系统提供的接口来完成底层硬件的操作,而C语言的文件操作函数也不例外,其对应的底层接口分别是open(打开),close(关闭),write(写入),read(读取)

 

 2.2 文件描述符

 细心的同学一个已经放下,在上面的系统接口中,我用红线将变量fd标注出来,其实这就是文件描述符,在我们调用open打开文件或者新建文件后,系统会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

文件描述符在形式上是一个非负整数。实际上,它是一个数组下标,指向系统为每一个进程所维护的该进程打开文件的文件描述符表。

接下来我们来写一个简单的代码来观察一下文件描述符:

这里我们发现我们只开了一个文件,但是文件操作符却是3,而不是0,1,2,这是为什么呢? 首先在Linux中我们要理解一切皆文件的第一要义,而从键盘输入,从显示器输出,其实也是打开对应的设备文件进行输入输出,即stdin,stdout,以及错误输出stderr,这三个分别称为标准输入,标准输出,标准错误,这三个默认的文件操作符分别是0,1,2。

 三,文件描述符的原理

 首先用户创建一个进程,我们创建一个进程结构task_struct来表示进程的属性,其中有一个File指针指向files_struct,其中存储这文件描述符表arr[],当我们打开文件时,会在内存中创建一个file_struct来存储每个打开文件的属性,然后这些file_struct按照文件描述符的规则再一一映射到文件描述符表arr[]中,因此当我们想修改或者读取log.txt文件时,就是通过log.txt的文件描述符在文件描述符表arr[]中找到其对应的file_struct结构体指针,然后对文件进行访问。

四,文件描述符的分配规则

规则:在file_struct中从小到大找到找到一个没有被使用的下标,作为新的文件描述符。

我们可以写一段代码来证明一下。

 观察上图我们发现,当我们关闭0也就是stdin文件时,新开文件的文件描述符会从0下标开始

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

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

相关文章

使用SSH远程连接安卓手机Termux - Android手机服务器

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 转载自cpolar极点云的文章:公网SSH远程连接Termux – 电脑使用安卓Termux 「无需公网IP」 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不…

阿里云推出基于大模型的工作学习AI助手“通义听悟”

文章目录 人工智能福利文章什么是通义听语通义听语有哪些优势通义听语能做什么体验地址写在最后 ✍创作者:全栈弄潮儿 🏡 个人主页: 全栈弄潮儿的个人主页 🏙️ 个人社区,欢迎你的加入:全栈弄潮儿的个人社区…

【已解决】MacOS13.4 arm64 python3.8 pycharm anaconda无法安装wordcloud问题

环境 操作系统:MacOS 13.4 系统架构:osx-arm64 python版本:3.8 编辑器:PyCharm 问题 在PyCharm的terminal中安装wordcloud,但总是装不上,显示如下报错: ERROR: Failed building wheel for wo…

跨境电商补单策略:如何提升销量和权重

跨境电商经营中,有一种快速提升产品权重和销量的策略:补单 补单可以帮助产品快速积累评论,提升排名,并打造爆款,然而,当前市场上大约90%的测评资源质量低下,好的资源寥寥无几 而且跨境电商的经…

航天航空飞机火箭模型3D打印制作服务/增材制造航空模型制作

3D打印是对“增材制造”这种材料成型工艺的通俗叫法。3D打印是制造业有代表性的颠覆性技术,区别于传统的材料成型工艺,在加工的过程中材料质量不减反增,通过“自下而上”的材料累加来成型。 【CASAIM智能制造】是中科院下属机构,作…

chatgpt赋能python:用Python写优质SEO文章的方法

用Python写优质SEO文章的方法 Python语言是当前广泛应用于程序开发的最流行的高级编程语言之一。Python能够通过结构化和面向对象编程的方式,帮助开发者快速地开发各种类型的应用程序。但是,Python的使用不仅限于程序开发。最近,Python在SEO…

解读科学计算助力行业高质量发展|2023 开放原子全球开源峰会科学智能分论坛即将启幕

诺贝尔奖获得者威尔逊曾说过,现代科学研究的三大支柱:科学实验、理论研究、科学计算。深度学习和科学模型的结合,将会给传统科学领域带来新的机遇,并推动科研范式的创新。人工智能在科学计算领域有哪些问题和突破?如何…

重磅升级|ONES Resource 资源管理解决方案

在研发项目中,科学高效的资源管理,能有效减少资源浪费、成本超支和进度延误,以最少的投入实现资源效益的最大化。 ONES Resource 以资源规划与进度跟踪两个环节为核心,提供了多维度的可视化报表,全面展示资源规划与使…

团队管理之性能实施团队日志5

文章目录 一、前言二、项目计划三、管理团队间的事件四、管理团队内的事件五、管理上层领导事件的进度和预期六、管理风险和资源 一、前言 今天重做了一遍项目的计划。 因为在我上周三离开项目组的时候,跟他们说要创建一个详细的项目计划,但是到今天我还…

ChatGPT唤醒AI游戏?

配图来自Canva可画 “七天制作新游戏”、“AI全自动完成所有游戏!”......继各种AI绘画、AI合成照片、视频之后,AI在游戏领域开启了新一场狂欢。 长久以来,游戏和AI一直有着“相互扶持”的亲密关系——一边是游戏充当AI科研基地&#xff0c…

哪种电容笔更好用?便宜好用的电容笔

有了电容笔使用方便、随身携带,一跃成为iPad人士的新宠,几乎是人手必备的数码单品,电容笔市场十分庞大,让消费者很难抉择到底电容笔哪个品牌最好,所以下面就介绍几款使用效果不错的电容笔,分享给大家。 一…

苹果笔买原装的还是随便买?好用又便宜的平替电容笔

如今,电容笔在网上办公室、网上教育等行业都很受欢迎,平替电容笔会取代苹果原装的电容笔吗?事实上,你完全没有必要花费大量的金钱来购买一支原装的苹果电容笔。一支普通的平替式电容笔也就一百到二百块钱,比起苹果的电…

2032年物联网通信协议市场将达到246亿美元,蓝牙技术起重要作用

到 2032 年,物联网通信协议市场价值将达到 246 亿美元。 2022年,其估值为159亿美元。 2022 年至 2032 年之间的复合年增长率可能会达到 4.5%。 消费电子产品正在集成物联网通信协议,实现跨设备的连接和通信。 这些进一步促进了连接和智能产…

代码审计精品课程|python之SSTI漏洞介绍

SSTI模板注入 Python类 类(class)是Python中的一种基本的程序组织结构。它们允许定义一种新的数据类型,称为对象(object),并为该类型定义行为(即方法)。 Python中的类由关键字cla…

【shiro】subject.login(token)流程源码分析

前言 之前在写【Shiro】SimpleAuthenticationInfo如何验证password的时候,了解了下验证方式的源码,但在做shiro整合Jwt时,debug发现执行的顺序和理解的不太一样,因此,中途插篇了解下这个login的源码,看看它…

VisualAssist v10.9.2491 NEW-Crack

VisualAssist 为 C/C 和 C# 开发人员填补 Visual Studio 中的空白 快速导航 以全新的方式轻松移动您的代码 — 移动到您的项目和解决方案中的任何文件、方法、符号或引用。从任何地方到达任何地方。 与其他类型的功能一样,Visual Assist 的导航功能对于 IDE 来说是全…

开发者必读指南:必须知道的关键性能指标,提升代码性能

1、性能指概述 在Web应用程序的开发过程中,性能是一个至关重要的问题。高性能的Web应用程序需要快速响应,并能够处理大量的并发请求。而为了评估Web应用程序的性能状况,我们需要关注一些关键的性能指标。本文将介绍一些常见的Web项目性能指标…

【网络】· 路由交换设备远程管理,以及VLAN的配置

目录 🍉配置管理IP地址 🥝配置VTY密码 🥝配置默认网关 🍉虚拟局域网(VLAN) 🥝VLAN的概念 🥝VLAN范围 🥝VLAN基本配置 🍌创建VLAN 🍌删除VLAN &…

chatgpt赋能python:Python利用数据可视化出图,为SEO拓展新思路

Python利用数据可视化出图,为SEO拓展新思路 数据可视化出图在SEO领域中是非常重要的,它不仅能丰富网站内容,还能提高用户体验。而Python语言在数据处理和可视化方面具有很大的优势,让我们一起来看看如何利用Python出图来拓展SEO应…

制造业大型企业为什么需要做采购数字化转型?

大型制造企业要在采购方面进行数字化转型,原因如下: 成本优化:采购中的数字化转型使组织能够简化采购流程、自动化手动任务并消除低效率。通过减少采购周期时间、消除特立独行的支出以及提高与供应商谈判能力来实现成本优化。 改进可见性和分…