文件描述符
文件描述符(File Descriptor,简称 fd)是操作系统中用于唯一标识已打开文件或 I/O 资源的整数值。它在 Unix/Linux 系统中扮演核心角色,本质是进程访问文件、管道、套接字等资源的抽象句柄。
核心概念:
-
非负整数标识符
- 由操作系统内核分配,取值范围通常是
0到RLIMIT_NOFILE(系统限制的最大值,默认为 1024)。 - 每个进程独立维护自己的文件描述符表。
- 由操作系统内核分配,取值范围通常是
-
标准描述符(进程启动时自动分配) 整数值 名称 用途 0STDIN_FILENO标准输入(键盘输入) 1STDOUT_FILENO标准输出(终端显示) 2STDERR_FILENO标准错误(错误输出) -
资源抽象
不仅指向普通文件,还可表示:- 管道(
pipe) - 网络套接字(
socket) - 设备文件(如
/dev/tty) - 匿名内存映射等
- 管道(
工作原理:
-
打开资源
调用open()、socket()等系统函数时,内核返回一个新 fd。int fd = open("data.txt", O_RDWR); // 打开文件,返回 fd -
读写操作
通过 fd 使用read()/write()操作资源:char buf[100]; read(fd, buf, sizeof(buf)); // 从 fd 读取数据 -
关闭资源
使用close()释放 fd 及关联资源:close(fd); // 释放 fd
关键特性:
- 继承性
子进程通过fork()继承父进程的 fd 表(例如管道通信依赖此特性)。 - 重定向
通过dup2()可复制 fd,实现 I/O 重定向(如./cmd > output.txt)。 - 系统级管理
- 查看进程的 fd:
ls -l /proc/<PID>/fd/ - 修改系统限制:
ulimit -n 65535(调整最大 fd 数量)
- 查看进程的 fd:
示例场景:
-
文件操作
int fd = open("log.txt", O_CREAT | O_WRONLY, 0644); write(fd, "Hello", 5); close(fd); -
网络通信
int sock_fd = socket(AF_INET, SOCK_STREAM, 0); connect(sock_fd, &server_addr, sizeof(server_addr)); -
管道通信
int pipefd[2]; pipe(pipefd); // 创建管道 write(pipefd[1], data, size); // 写端写入 read(pipefd[0], buf, size); // 读端读取
常见问题:
- fd 泄漏:未正确
close()导致资源耗尽(可通过lsof -p <PID>检测)。 - 竞态条件:多线程操作同一 fd 需同步。
- 非阻塞 I/O:通过
fcntl(fd, F_SETFL, O_NONBLOCK)设置非阻塞模式。
总结:文件描述符是操作系统对 I/O 资源的统一抽象,通过简单的整数句柄屏蔽底层差异,是 Linux/Unix 系统编程的基石概念。
Python的优雅之处:Descriptor(描述符)
学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号。 描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言
2023-11-02 10:52:26
基于DWC_ether_qos的以太网驱动开发-描述符格式介绍
前面我们介绍了描述符链表的工作模式,重点是了解环形链表是如何环形的,以及相关的寄存器。驱动编写就需要更进一步,了解描述符的具体内容,即4个描述符
2023-09-04 14:14:18
USB_HID_报表描述符
报表描述符由描述 HID 设备的数据 项目(Item ) 组成。项目的 第一个字节 (项目前缀)由三部分构成:项目标志( item Tag ):说明项目的功能, 项目类型( item Type
资料下载
李明
2021-12-28 19:42:33
总结:CubeMx 生成的USB CDC程序 USB设备描述符请求失败
CubeMx 生成的USB CDC程序 WIN10系统 USB设备描述符请求失败一、说明二、cubeMX配置过程1、时钟树设置2、参数配置3、管脚配置4、中段配置5、生成代码,编译下载6、结果三
资料下载
李艳
2021-12-28 19:42:13
隐藏描述符工具应用程序免费下载
本文档的主要内容详细介绍的是HID Descriptor Tool隐藏描述符工具应用程序免费下载。
资料下载
zhangzili
2020-01-08 08:00:00
USB各描述符之间的依赖是怎么样的
USB 是个通用的总线,端口都是统一的。但是USB 设备却各种各样,例如USB 鼠标, USB键盘, U盘等等,那么USB 主机是如何识别出不同的设备的呢?这就要依赖于描述符了。USB 的描述符主要有设备
资料下载
佚名
2019-07-23 16:53:27
USB设备键值表描述符说明资料免费下载
本文档的主要内容详细介绍的是USB设备键值表描述符说明资料免费下载包括了:1.设备描述符的结构,2. 配置描述符的结构,3. 接口
资料下载
佚名
2019-07-16 16:56:34
从获取描述符的角度理解Gadget框架
安装好 gadget 驱动程序后(比如 modprobe g_zero), 它只是构造好了各类描述符。在设备的枚举过程会读取描述符。 使用 OTG 线连接电脑和开发板时,电脑软件会执行如下
2023-07-13 11:38:03
Gadget框架构造描述符
假设你要【模拟】一个 USB 设备: 这个 USB 设备含有厂家信息:它记录在设备描述符里,所以设备描述符应该由你提供 这个芯片可能有多种配置,这也是由你决定,所以配置
2023-07-13 11:34:25
科普一下什么是USB的描述符
以及行为呢?这就要通过描述符来实现了。那么什么是USB的描述符呢?其实就是一些传递的协议信息,比如设备的类型、厂商ID、产品ID、端点情况、版本号等信息。 既然
2021-12-02 14:41:17
ARM中,Linux 文件描述符到底是什么?
一个 Linux 进程启动后,会在内核空间中创建一个 PCB 控制块,PCB 内部有一个文件描述符表(File descriptor table),记录着当前进程所有可用的
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机