文件描述符 linux 文件描述符表

大家好,文件描述符 linux相信很多的网友都不是很明白,包括文件描述符表也是一样,不过没有关系,接下来就来为大家分享关于文件描述符 linux和文件描述符表的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

手把手教Linux驱动4-进程、文件描述符、file、inode关系详解

本文旨在解析Linux驱动中的核心概念,包括文件描述符、进程与文件之间的关系,以及Linux设备文件的三大结构:inode、file、file_operations。首先,解释文件描述符的作用和意义,指出它在Linux中的重要性及默认配置,同时介绍进程如何管理和维护打开的文件描述符。接着,阐述如何查看和管理文件描述符的上限,包括如何使用命令查看进程已打开和允许打开的最大文件描述符数量。进一步地,介绍如何使用lsof命令来追踪文件被哪些进程打开,以及查看特定进程已打开的文件详情。

在驱动程序的开发中,Linux设备文件的内部机制是关键,其中inode、file和file_operations结构体扮演着重要角色。本文详述了inode的定义和用途,以及如何创建和管理它,特别是针对字符设备文件的情况。通过实例说明如何创建字符设备文件,并分析内核如何维护这些文件节点和inode结构。

详细解释了进程打开设备文件的过程,包括内核如何处理open函数调用,以及创建file结构体与分配文件描述符。同时,阐述了同一文件多次打开时,内核如何管理与分配新的file结构体。最后,讨论了如何支持多种同类型设备的驱动开发,以及如何通过宏MINOR来获取注册的设备结构体私有地址。

本文旨在提供深入理解Linux驱动开发中文件管理、进程与文件交互以及设备文件内部结构的途径,帮助开发者更高效地进行驱动程序设计与实现。通过实践示例和详细解析,读者可以清晰地了解上述概念及其在实际开发中的应用。

Linux文件描述符表和文件的关系

Linux中的文件类型

Linux系统中把一切都看做文件,包括普通文件-、目录文件d、字符设备文件c、块设备文件b、符号链接文件l。文件描述符是内核为了高效管理已被打开的文件所创建的索引(一个非负整数),用于指代已被打开的文件,Linux下所有的的I/O操作的系统调用都是通过文件描述符执行。例如0表示标准输入、1表示标准输出、3表示标准错误

,文件描述符会在这个基础上递增。

文件描述符、文件、进程之间的关系

每个文件描述符都指向一个打开的文件相对应

不同的文件描述符可能指向同一个打开的文件

相同的文件可能被不同的进程打开,也可以在被同一个进程打开多次

文件描述符表:

进程级的列表,也就是用户区的一部分,进程每打开一个文件就会新建一个文件描述符,同时只能通过文件描述符的函数访问,否则进程无法直接对其进行访问。

系统文件表:

系统级的列表,对当前系统的所有进程都共享,每条条目包含文件偏移量、访问模式以及指向它的文件描述符的条目计数

文件系统索引节点表:

inode索引节点表(UID、GID、ctime、mtime、atime、读写执行权限、链接数、block位置)

Linux操作系统 文件描述符

Inode存储文件元数据,包括文件编号、权限、拥有者UID、所属组GID、硬链接数、大小、时间戳和数据块指针。

通过Linux的stat命令查看文件Inode信息。参数解释为:

目录与文件名保存在父目录block中,通过block可定位到文件名与Inode关系。

Linux中,内核使用inode定位文件,但一个文件可被多个用户同时打开或多次打开。为管理位移量,避免不同操作导致的差异,引入文件描述符(file descriptor)。

每次打开文件产生一个文件描述符,对应当前文件偏移量等数据。一个inode可以关联多个文件描述符,多个描述符指向同一inode。

打开文件时,内核生成文件描述符。三个表:文件描述符表、打开文件表和inode表,描述通过描述符找到物理位置。

重定向符号<、>、<>用于重定向输入输出。例如,<>以读写模式打开socket文件。

建立链接时,创建socket文件描述符,使用exec命令与目标端口建立连接。

使用exec命令替换当前shell,执行指定命令。避免影响主shell,通常将exec放在shell脚本中。

exec命令后,当前shell进程被替换,仅执行指定命令。避免直接使用exec命令影响shell操作。

文件操作底层流程包括打开、关闭文件。实践示例:读写socket、向百度发送HTTP请求。

建立链接时,创建socket文件描述符,使用<>符号以读写模式打开。

查看进程文件描述符,确认创建的描述符。

exec命令替换shell,执行命令。注意区别source命令与exec命令在文件描述符操作上的行为。

发送请求,获取响应。使用cat命令与文件描述符关联,将socket文件内容输出。

获取百度返回信息,完成请求响应流程。

关注学习资料、教学视频和学习路线图,可加入交流群获取更多Linux后台服务器架构开发和内核学习资源。

阅读剩余
THE END