Linux 文件描述符(File Descriptor, FD)详解

文件描述符(File Descriptor, FD)

文件描述符是操作系统为进程管理打开文件/资源分配的整数句柄。它是Unix/Linux系统中所有I/O操作的核心抽象

核心概念

1.本质是什么?

  • 一个非负整数(0, 1, 2, 3, …)
  • 指向内核维护的打开文件表的索引
  • 进程级别的资源标识符

2.三个标准文件描述符

0- stdin(标准输入)1- stdout(标准输出)2- stderr(标准错误)

如何工作?

内核中的数据结构关系

进程A 内核 ├── 文件描述符表 ├── 系统级打开文件表 │ fd 0 → 条目1 │ 条目1 → 文件信息1 │ fd 1 → 条目2 │ 条目2 → 文件信息2 │ fd 4 → 条目3 │ 条目3 → 文件信息3 └── └──

实际例子

// 打开文件时获取文件描述符intfd=open("file.txt",O_RDONLY);// fd 可能是 3(如果 0,1,2 已被占用)// 通过 fd 进行读写read(fd,buffer,size);write(fd,buffer,size);// 完成后关闭close(fd);

文件描述符可以指向什么?

不仅仅是文件!可以是任何I/O资源

资源类型例子如何创建
普通文件/etc/passwdopen()
目录/home/useropendir()
网络套接字TCP/UDP连接socket()
管道进程间通信pipe()
设备文件/dev/tty,/dev/nullopen()
符号链接软链接文件open()

查看文件描述符

在进程中查看

# 查看当前shell的文件描述符ls-la /proc/$$/fd# 输出示例:# lrwx------ 1 user user 64 Dec 10 10:00 0 -> /dev/pts/0# lrwx------ 1 user user 64 Dec 10 10:00 1 -> /dev/pts/0# lrwx------ 1 user user 64 Dec 10 10:00 2 -> /dev/pts/0# lr-x------ 1 user user 64 Dec 10 10:00 3 -> /etc/passwd

查看进程打开的文件描述符

# 使用 lsof 查看lsof-p<PID># 使用 /procls-la /proc/<PID>/fd/cat/proc/<PID>/fdinfo/3# 查看 fd 3 的详细信息

文件描述符的特性

1. 继承性

# 子进程继承父进程的文件描述符# 这就是为什么重定向能在管道中工作:ls-l|greptxt2>errors.log# grep 继承了 ls 的 stdout 和 stderr

2. 引用计数

// 多个描述符可以指向同一个文件intfd1=open("file.txt",O_RDONLY);// refcount = 1intfd2=dup(fd1);// refcount = 2close(fd1);// refcount = 1close(fd2);// refcount = 0 → 文件真正关闭

3. 文件描述符表 vs 打开文件表

进程A 进程B fd3 ----\-->系统打开文件表条目1 -->实际文件 fd2 ----/

实际应用场景

1. 重定向

# 将 stdout (fd 1) 重定向到文件exec1>output.logecho"这会写入文件"# 将 stderr (fd 2) 重定向到 stdoutcommand2>&1# 创建自定义文件描述符exec3<>/tmp/socket# 打开 fd 3 用于读写echo"data">&3# 写入 fd 3readline<&3# 从 fd 3 读取

2. 网络编程

// socket() 返回的也是一个文件描述符!intsock_fd=socket(AF_INET,SOCK_STREAM,0);connect(sock_fd,...);// 使用 fd 连接send(sock_fd,data,...);// 使用 fd 发送recv(sock_fd,buffer,...);// 使用 fd 接收

3. 进程间通信

intpipe_fd[2];pipe(pipe_fd);// pipe_fd[0] 用于读,pipe_fd[1] 用于写if(fork()==0){// 子进程:关闭读端,写入数据close(pipe_fd[0]);write(pipe_fd[1],"Hello",6);}

限制和配置

查看限制

# 查看单个进程最大文件描述符数ulimit-n# 查看系统全局限制cat/proc/sys/fs/file-max# 查看当前已使用的文件描述符数cat/proc/sys/fs/file-nr# 输出:已分配 已使用 最大值

修改限制

# 临时修改ulimit-n65536# 永久修改(系统级)echo"fs.file-max = 1000000">>/etc/sysctl.conf sysctl -p# 用户级限制# 编辑 /etc/security/limits.conf# * soft nofile 65536# * hard nofile 65536

常见问题

“Too many open files” 错误

# 原因:文件描述符耗尽# 查看某个进程打开的文件数ls/proc/<PID>/fd|wc-l# 解决方案:# 1. 增加系统限制# 2. 检查程序是否有文件泄露(未关闭)

文件描述符泄露检测

# 使用 lsof 监控watch-n1'lsof -p <PID> | wc -l'# 使用 /proc 监控watch-n1'ls /proc/<PID>/fd | wc -l'

总结

文件描述符的核心价值

  1. 统一抽象:所有I/O资源(文件、网络、管道)都用 fd 表示
  2. 简单接口:只需read()write()close()几个系统调用
  3. 高效管理:内核统一管理,用户态只用整数操作
  4. 资源控制:通过限制 fd 数量,控制资源使用

正是因为文件描述符的存在,Unix/Linux 才能实现"一切皆文件"的哲学,让复杂的I/O操作变得简单统一。

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

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

相关文章

大模型智能体记忆管理新范式:Agentic Memory框架详解

阿里巴巴与武汉大学联合提出的Agentic Memory (AgeMem)框架解决了大语言模型智能体在长周期推理任务中的记忆管理问题。该框架通过基于工具的统一接口将长期记忆(LTM)和短期记忆(STM)集成到智能体决策过程中&#xff0c;并采用三阶段渐进式强化学习策略和逐步式GRPO机制。在多个…

高效解决AI生成重复问题:十款热门工具全面评测与应对方案

核心工具对比速览 工具名称 核心功能 适用场景 处理速度 特色优势 aibiye 降AIGC率查重 学术论文优化 20分钟 适配知网/格子达/维普规则 aicheck AIGC检测 风险区域识别 实时 可视化热力图报告 askpaper 学术内容优化 论文降重 20分钟 保留专业术语 秒篇 …

用“公司决策“类比揭开大模型黑箱,BuPO方法让AI推理能力飙升(附开源代码)

BuPO方法通过将大语言模型策略分解为内部层次策略&#xff0c;采用自下而上的优化方式&#xff0c;先强化底层基础推理能力&#xff0c;再优化整体决策。实验证明该方法在数学推理等复杂任务中表现优异&#xff0c;揭示了不同模型的独特推理模式&#xff0c;为LLM优化提供了透明…

亲测好用8个一键生成论文工具,本科生轻松搞定毕业论文!

亲测好用8个一键生成论文工具&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具如何让论文写作变得轻松 在当前的学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。尤其是随着 AIGC&#xff08;人工智能生成内容&#xff09;技术的不断发展&…

持续集成的价值流——质量门禁、报告可视化与快速反馈的设计重点

写在前面&#xff0c;本人目前处于求职中&#xff0c;如有合适内推岗位&#xff0c;请加&#xff1a;lpshiyue 感谢。同时还望大家一键三连&#xff0c;赚点奶粉钱。 系列文章已完结&#xff0c;全文阅读链接&#xff1a;https://p.kdocs.cn/s/EJACICRFACQBS持续集成的真正价值…

输入某电商店铺的商品名称,收藏量,销量,计算热度值(收藏+销量),输出爆款商品侯选

为你完整设计一个电商店铺爆款商品候选分析系统&#xff0c;结合大数据与智能管理课程的思想&#xff0c;从场景到代码、从模块到文档&#xff0c;全部覆盖。1. 实际应用场景 & 痛点引入场景你是某电商店铺的运营人员或数据分析师&#xff0c;手头有商品数据&#xff08;商…

导入自己的观影记录(电影名,评分,时长),统计高分电影(8分以上),推荐同类型电影。

为你完整设计一个观影记录分析与推荐系统&#xff0c;结合大数据与智能管理课程的思想&#xff0c;从场景到代码、从模块到文档&#xff0c;全部覆盖。1. 实际应用场景 & 痛点引入场景你是一名电影爱好者&#xff0c;长期在豆瓣、IMDb 等平台记录观影数据&#xff08;电影名…

GB/Z167-2025《系统控制图》全维度解析

GB/Z167-2025《系统控制图》是 2025 年 12 月 3 日发布的国家标准化指导性技术文件&#xff0c;适用于过程工业连续控制系统&#xff08;如石油、天然气工艺过程&#xff09;的设计与管理。其核心价值在于建立统一的操作控制功能定义和逻辑图规范&#xff0c;填补了传统 P&…

如何用开源 HIS 系统实现病案高效归档与检索?天天开源医疗软件介绍

引言在医疗信息化落地过程中&#xff0c;中小型医院常面临 “病案管理规范化不足、系统部署成本高、数据检索效率低” 三大核心痛点。开源HIS 系统凭借可定制化、低成本的优势&#xff0c;成为解决这类问题的优选方案。项目介绍中小型医院在选择开源 HIS 系统时&#xff0c;往往…

1700RZ14005A电路板控制器

1700RZ14005A 电路板控制器型号: 1700RZ14005A 类型: 控制器 / 控制电路板 适用系统: 工业自动化控制系统&#xff08;如 Taylor MOD 系列&#xff09;基本介绍1700RZ14005A 是工业控制系统中的 控制器模块&#xff0c;安装在控制机柜的背板或机箱中。它负责接收输入信号、执行…

锁住新鲜,守护价值:基于工业网关的冷链物流全程可视溯源体系

场景痛点&#xff1a;医药用品、生鲜食品、化工产品等对运输仓储温湿度有着严格的要求。传统温湿度监测局限于冷链车辆中&#xff0c;数据孤立、无法远程查看&#xff0c;一旦出现异常而司机没有及时发现&#xff0c;就有可能带来经济损失和信誉风险。此外&#xff0c;企业也难…

网友直呼不可能,重庆到河南居然仅200公里

在我们许多人印象中&#xff0c;地处西南的重庆与坐落于中原的河南相隔千山万水&#xff0c;然而仔细查看地图会发现&#xff0c;两省市最近处直线距离仅约200公里。 这一数字让人惊叹不已&#xff0c;甚至有网友直呼不可能。 但从地图上测量的结果来看&#xff0c;重庆到河南…

2026重磅揭秘:赋能智能制造业,AI考勤排班Top厂商全景解析

在智能制造与精益生产深度融合的今天&#xff0c;制造业的人力资源管理正面临前所未有的挑战。多班倒、跨生产线协调、灵活用工需求以及严格合规性要求&#xff0c;让传统考勤排班方式不堪重负。AI考勤排班专员以其智能化、数据化、自动化的核心能力&#xff0c;正成为制造业提…

MySQL 数据可视化的核心步骤

数据准备与清洗 确保数据质量是可视化的基础&#xff0c;通过SQL查询筛选、聚合或转换数据&#xff0c;例如使用GROUP BY、JOIN或窗口函数处理原始数据。对于缺失值或异常值&#xff0c;可通过COALESCE或CASE WHEN进行修正。连接可视化工具 主流工具如Tableau、Power BI或Pytho…

6024NR14130电源模块

6024NR14130 电源模块 — ABB Taylor 系列型号: 6024NR14130 类型: 模块化电源模块功能与应用6024NR14130 是一款工业级模块化电源模块&#xff0c;主要用于 ABB Taylor 系列或 MOD300 控制系统中。它为控制系统的 CPU、I/O 模块、通信模块等提供稳定电源&#xff0c;保证整个系…

一文讲透线框图:概念、分类、工具与注意事项全解析

很多新手产品经理常犯的一个错误是&#xff1a;需求还没理顺&#xff0c;就开始纠结按钮是圆角还是直角&#xff0c;配色是极简白还是高级蓝。 想要避免这个问题&#xff0c;其实很简单&#xff0c;先专注画好线框图。 线框图排除了美学的干扰&#xff0c;强迫团队聚焦于最本…

脸都不要了!美国开始正式出售委内瑞拉石油

当地时间1月14日&#xff0c;一位美国政府官员透露&#xff0c;美国已完成首批委内瑞拉石油的销售。 这笔交易价值5亿美元&#xff0c;该官员补充说&#xff0c;预计未来几天和几周还将进行更多石油销售&#xff0c;图2为委内瑞拉一处炼油厂。 1月3日凌晨&#xff0c;美国对委…

ChatGPT优化公司有哪些?剖析专业服务商的核心能力矩阵

在人工智能应用日趋深化的商业环境中&#xff0c;ChatGPT等大语言模型的优化能力&#xff0c;已成为衡量企业数字竞争力的一项重要指标。真正的优化服务商&#xff0c;其价值不仅在于提升单次交互的满意度&#xff0c;更在于构建一套可迭代、可衡量、且与商业目标对齐的系统性能…

基于 Flutter × HarmonyOS 6.0 开发的字数统计小工具实践「CountBot」 的跨端实现

基于 Flutter HarmonyOS 6.0 开发的字数统计小工具实践—— 「CountBot」 的跨端实现前言 在日常开发与内容创作过程中&#xff0c;文本字数统计是一类看似简单、却使用频率极高的小工具。从写技术文档、博客文章&#xff0c;到编辑需求说明、代码注释&#xff0c;开发者往往需…

针对论文降重与AI写作需求,目前市面上有8款热门网站提供高效改写与创作功能。

AI论文工具种类繁多&#xff0c;如何挑选符合自身需求的平台成为关键。通过对8款主流工具的实测分析&#xff0c;从降重效果、AIGC率优化及论文撰写能力等维度展开对比&#xff0c;综合效率、准确度与操作便捷性进行客观评估。以下为基于实际测试与用户评价的实用工具排行摘要。…