文件描述符

文件描述符

2.1 文件描述符

文件描述符(File Descriptor)是在Unix-like操作系统中用于标识和访问文件或I/O设备的抽象概念。它是一个非负整数,用于**唯一标识一个打开的文件、套接字(socket)或其他类型的I/O资源。**文件描述符是进程级的,每个进程都有它自己的文件描述符表。

使用**文件描述符(file descriptor,简称fd),当在进程中打开一个现有文件或者创建一个新文件时,内核向该进程返回一个文件描述符,用于对应这个打开/新建的文件。**

一些基本的系统调用,比如openreadwriteclose等,使用文件描述符来指定操作的目标。当程序打开一个文件时,系统调用返回一个文件描述符,之后可以使用这个文件描述符进行读写等操作。例如:

#include <fcntl.h>
int file_descriptor = open("example.txt", O_RDONLY);

上述代码中,open函数打开一个文件(“example.txt”),并返回一个文件描述符(file_descriptor),以后可以使用这个文件描述符进行读取操作。

2.2 文件描述符表

虚拟地址空间的内核区有专门用于进程管理的模块, Linux的进程控制块PCB(process control block)本质是一个叫做task_struct的结构体,里边包括管理进程所需的各种信息,其中有一个结构体叫做file ,我们将它叫做文件描述符表,里边有一个整形索引表,用于存储文件描述符。

内核为每一个进程维护了一个文件描述符表,索引表中的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,但是它们指向的不一定是同一个磁盘文件。

在这里插入图片描述

  • 打开的最大文件数

每一个进程对应的文件描述符表能够存储的打开的文件数是有限制的, 默认为1024个,这个默认值是可以修改的,支持打开的最大文件数据取决于操作系统的硬件配置。

  • 默认分配的文件描述符

当一个进程被启动之后,内核PCB的文件描述符表中就已经分配了三个文件描述符

  1. STDIN_FILENO:标准输入,可以通过这个文件描述符将数据输入到终端文件中,宏值为0。
  2. STDOUT_FILENO:标准输出,可以通过这个文件描述符将数据通过终端输出出来,宏值为1。
  3. STDERR_FILENO:标准错误,可以通过这个文件描述符将错误信息通过终端输出出来,宏值为2。
  • 后续分配
  1. 因为进程启动之后,文件描述符表中的0,1,2就被分配出去了,因此从3开始分配

  2. 在进程中每打开一个文件,就会给这个文件分配一个新的文件描述符,比如:

    • 通过open()函数打开 /hello.txt,文件描述符 3 被分配给了这个文件,保持这个打开状态,再次通过open()函数打开 /hello.txt,文件描述符 4 被分配给了这个文件,也就是说一个进程中不同的文件描述符打开的磁盘文件可能是同一个。

    • 通过open()函数打开 /hello.txt,文件描述符 3 被分配给了这个文件,将打开的文件关闭,此时文件描述符3就被释放了。再次通过open()函数打开 /hello.txt,文件描述符 3 被分配给了这个文件,也就是说打开的新文件会关联文件描述符表中最小的没有被占用的文件描述符

小结:

  1. 每个进程对应的文件描述符表默认支持打开的最大文件数为 1024,可以修改
  2. 每个进程的文件描述符表中都已经默认分配了三个文件描述符,对应的都是当前终端文件(/dev/tty)
  3. 每打开新的文件,内核会从进程的文件描述符表中找到一个空闲的没有别占用的文件描述符与其进行关联
  4. 文件描述符表中不同的文件描述符可以对应同一个磁盘文件
  5. 每个进程文件描述符表中的文件描述符值是唯一的,不会重复

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

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

相关文章

在简历中展示的专业技能

您的下一个角色无疑将与您之前的工作经历有所不同。因此&#xff0c;讲述您的成就的故事会暗示您的潜力&#xff0c;分享您更广泛的技能也同样会产生影响。 当您在简历中谈论一项技能时&#xff0c;它不需要与最近的成就联系起来。当然&#xff0c;这是理想的情况&#xff0c;…

Elasticsearch-8.11.1 (2+1)HA(高可用)集群部署

目录 一、环境描述 二、安装 ES 2.1 下载Elasticsearch 2.2 解压Elasticsearch 2.3 创建es服务账号/密码 2.3 修改服务器配置 2.4 配置节点 2.4.1 配置说明 2.4.2 配置高可用集群 2.4.2.1 maser节点服务配置 2.4.2.2 node1 节点服务配置 2.4.2.3 node2 节点服务配置…

redis的基本使用

一、 Redis简介 Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库&#xff0c;重点关注数据存储格式&#xff0c;是key-value格式&#xff0c;也就是键值对的存储形式。与MySQL数据库不同&#xff0c;MySQL数据库有表、…

Pearson correlation coefficient (Pearson’s r) 皮尔森相关系数

此图用的是箱状图&#xff0c;的纵轴是“Pearson’s r”&#xff0c;是实际观测值与机器学习模型预测值之间的相关性 Pearsons f得分&#xff0c;它是一个统计量&#xff0c;用来衡量两个变量之间线性相关性的强度。这个得分可能是用来衡量实际观测值与机器学习模型预测值之间的…

YOLOv8改进 | 检测头篇 | ASFF改进YOLOv8检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv8的检测头形成新的检测头Detect_ASFF&#xff0c;其主要创新是引入了一种自适应的空间特征融合方式&#xff0c;有效地过滤掉冲突信息&#xff0c;从而增强了尺度不变性。经过我的实验验证&#xff0c;修改后的检测头…

基于51单片机的家用可燃气体报警器设计与实现

一、摘要 随着社会的发展&#xff0c;家庭用气设备越来越多&#xff0c;燃气泄漏事故也时有发生。为了保障人们的生命财产安全&#xff0c;设计一种基于单片机的家用可燃气体报警器是非常必要的。本文主要介绍了一种基于单片机的家用可燃气体报警器的设计与实现方法。该报警器…

Tomcat和Servlet

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Tomcat是什么&#xff1f;1.1下载&#xff1a;1.2 tomcat是什么1.3启动服务器&#xff1a; 二.部署三、Servlet3.1创建项目3.2引入依赖pom.xml的所有代码 3…

Tg-5511cb: tcxo高稳定性+105℃高温

爱普生推的一款TG-5511CB是一种高稳定的TCXO温补晶体振荡器&#xff0c;频率范围十分广泛从 10mhz ~ 54mhz&#xff0c;它的电源电压只需要3.3V&#xff0c;无论是手机还是其他电子设备&#xff0c;都能轻松提供稳定的电力支持。频率/温度特性表现出色&#xff0c;0.28 10^6Ma…

(2023,提示扩展,图像反演,文本到文本生成)自适应文本到图像生成的提示扩展

Prompt Expansion for Adaptive Text-to-Image Generation 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. 提示扩展数据集 3.1 图像审美数据集 3.2 图像到文本反演 3.3 查…

Obsidian笔记软件无公网远程同步数据到群辉Webdav

文章目录 1. 群晖开启Webdav服务2. 群晖安装Cpolar3. 配置Webdav远程地址4. Obsidian 安装Remotely Save5. Obsidian远程连接Webdav6. 固定Cpolar公网地址7. PC和移动端笔记同步演示 Obsidian是一款笔记软件&#xff0c;它基于Markdown&#xff0c;支持Windows、macOS、iOS和An…

个人博客主题 vuepress-hope

文章目录 1. 简介2. 配置2.1 个人博客&#xff0c;社媒链接配置 非常推荐vuepress-hope 1. 简介 下面的我的博客文章的截图 通过md写博客并且可以同步到github-page上 2. 配置 2.1 个人博客&#xff0c;社媒链接配置 配置文件 .vuepress/theme.ts blog: {medias: {BiliB…

计算机毕业设计 基于HTML5+CSS3的在线英语阅读分级平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

dayjs

dayjs dayjs 是一个轻量级的日期和时间处理库&#xff0c;类似于 JavaScript 内置的 Date 对象&#xff0c;但提供了更丰富的功能和更友好的 API。它专注于提供简单易用、功能丰富的日期操作方法&#xff0c;以满足开发者在处理日期和时间方面的需求。 以下是一些 dayjs 提供…

C#编程-使用变量

使用变量 请考虑以下场景:您必须创建一个程序,接受来自用户的两个数字并在屏幕上显示着两个数字之和。现在,读取用户提供的数字时,您需要将这些数字存储在内存中的某个位置,以便您能对这些数字执行加操作。您可以使用变量将这些数字存储在内存中。 下图显示了使用变量将…

MATLAB算法实战应用案例精讲-【图像处理】相机图像信号处理ISP

目录 算法原理 算法思想 几个相关概念 ISP的主要内部构成 ISP的控制结构

【MySQL从入门到精通】常用SQL语句分享

前言&#xff1a; 日常工作或学习过程中&#xff0c;我们可能会经常用到某些SQL&#xff0c;建议大家多多整理记录下这些常用的SQL&#xff0c;这样后续用到会方便很多。笔者在工作及学习过程中也整理了下个人常用的SQL&#xff0c;现在分享给你&#xff01;可能有些SQL你还不…

安卓系统的录屏工具 scrcpy

提供在windows、linux、mac进行命令行的录屏 GitHub - Genymobile/scrcpy: Display and control your Android device 要求安卓5.0以上版本&#xff0c;使能ADB debug It focuses on: lightness: native, displays only the device screenperformance: 30~120fps, depending …

股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测

文章目录 效果一览文章概述环境描述源码设计效果一览 文章概述 Autoformer、FEDformer和PatchTST是一些用于时间序列预测,包括股价预测的模型。它们都是在Transformer模型的基础上进行了改进和扩展,以更好地适应时间序列数据的特点。 Autoformer:Autoformer是一种自适应Tran…

pytorch05:卷积、池化、激活

目录 一、卷积1.1 卷积的概念1.2 卷积可视化1.3 卷积的维度1.4 nn.Conv2d1.4.1 无padding 无stride卷积1.4.2 无padding stride2卷积1.4.3 padding2的卷积1.4.4 空洞卷积1.4.5 分组卷积 1.5 卷积输出尺寸计算1.6 卷积的维度1.7 转置卷积1.7.1 为什么被称为转置卷积1.7.2 nn.Con…

批量估计问题

最大后验估计MAP x ^ arg ⁡ max ⁡ x p ( x ∣ u , y ) \hat{x}\arg \max _{x}p\left( x|u,y\right) x^argxmax​p(x∣u,y) 我们希望在给定先验信息和所有时刻的输入 u u u和观测 y y y&#xff0c;推断出所有时刻的最优状态 x ^ \hat{x} x^。为此我们定义几个宏观变量。 x…