登录/注册

文件描述符

更多

文件描述符(File Descriptor,简称 fd)是操作系统中用于唯一标识已打开文件或 I/O 资源的整数值。它在 Unix/Linux 系统中扮演核心角色,本质是进程访问文件、管道、套接字等资源的抽象句柄。

核心概念:

  1. 非负整数标识符

    • 由操作系统内核分配,取值范围通常是 0RLIMIT_NOFILE(系统限制的最大值,默认为 1024)。
    • 每个进程独立维护自己的文件描述符表。
  2. 标准描述符(进程启动时自动分配) 整数值 名称 用途
    0 STDIN_FILENO 标准输入(键盘输入)
    1 STDOUT_FILENO 标准输出(终端显示)
    2 STDERR_FILENO 标准错误(错误输出)
  3. 资源抽象
    不仅指向普通文件,还可表示:

    • 管道(pipe
    • 网络套接字(socket
    • 设备文件(如 /dev/tty
    • 匿名内存映射等

工作原理:

  1. 打开资源
    调用 open()socket() 等系统函数时,内核返回一个新 fd。

    int fd = open("data.txt", O_RDWR); // 打开文件,返回 fd
  2. 读写操作
    通过 fd 使用 read()/write() 操作资源:

    char buf[100];
    read(fd, buf, sizeof(buf)); // 从 fd 读取数据
  3. 关闭资源
    使用 close() 释放 fd 及关联资源:

    close(fd); // 释放 fd

关键特性:


示例场景:

  1. 文件操作

    int fd = open("log.txt", O_CREAT | O_WRONLY, 0644);
    write(fd, "Hello", 5);
    close(fd);
  2. 网络通信

    int sock_fd = socket(AF_INET, SOCK_STREAM, 0); 
    connect(sock_fd, &server_addr, sizeof(server_addr));
  3. 管道通信

    int pipefd[2];
    pipe(pipefd);          // 创建管道
    write(pipefd[1], data, size); // 写端写入
    read(pipefd[0], buf, size);   // 读端读取

常见问题:

总结:文件描述符是操作系统对 I/O 资源的统一抽象,通过简单的整数句柄屏蔽底层差异,是 Linux/Unix 系统编程的基石概念。

USB组合设备的配置描述符里一定要用IAD描述符吗?

USB组合设备的配置描述符里一定要用IAD描述符吗

2025-03-11 06:41:31

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

以太网数据帧的发送描述符队列是什么意思?

这个描述符是什么呀,类似linux系统的文件描述符吗

2022-05-26 06:15:27

科普一下什么是USB的描述符

以及行为呢?这就要通过描述符来实现了。那么什么是USB的描述符呢?其实就是一些传递的协议信息,比如设备的类型、厂商ID、产品ID、端点情况、版本号等信息。 既然

2021-12-02 14:41:17

Linux系统编程中的文件描述符调用

文件描述符 进程每打开一个文件的时候,会获得该文件的

2021-09-02 09:50:02

ARM中,Linux 文件描述符到底是什么?

一个 Linux 进程启动后,会在内核空间中创建一个 PCB 控制块,PCB 内部有一个文件描述符表(File descriptor table),记录着当前进程所有可用的

2020-10-23 16:11:11

传递文件描述符是什么?

我买了一本书《Linux网络编程》。 看到第11章高级套接字。有个例子,传递文件描述符。 其中,进程A根据用户输入的文件名打开一个

2020-05-07 02:18:02
7天热门专题 换一换
相关标签