文章目录

  • 文件描述符
  • 提出前提
  • 简介
    • 如何创建文件描述符
  • 20220411 文件描述符扩展

文件描述符

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

提出前提

每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表,该表的值都是从0开始的,所以在不同的进程中你会看到相同的文件描述符,这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。具体情况要具体分析,要理解具体其概况如何,需要查看由内核维护的3个数据结构。

  1. 进程级的文件描述符表;
  2. 系统级的打开文件描述符表;
  3. 文件系统的i-node表。

简介

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2。尽管这种习惯并非Unix内核的特性,但是因为一些 shell 和很多应用程序都使用这种习惯,因此,如果内核不遵循这种习惯的话,很多应用程序将不能使用。

POSIX 定义了 STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO 来代替 0、1、2。这三个符号常量的定义位于头文件 unistd.h。

文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int 的大小,以及系统管理员设定的限制。Linux 2.4.22 强制规定最多不能超过 1,048,576 。

文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文

如何创建文件描述符

进程获取文件描述符最常见的方法是通过本机子例程open或create获取或者通过从父进程继承。后一种方法允许子进程同样能够访问由父进程使用的文件。文件描述符对于每个进程一般是特定的。当用fork子例程创建某个子进程时,该子进程会获得其父进程所有文件描述符的副本,这些文件描述符在执行fork时打开。在由fcntl、dup和dup2子例程复制或拷贝某个进程时,会发生同样的复制过程。

对于每个进程,操作系统内核在u_block结构中维护文件描述符表,所有的文件描述符都在该表中建立索引。

参考文章:文件描述符

20220411 文件描述符扩展

Linux—文件描述符、进程、线程

文件描述符fd是什么?相关推荐

  1. linux文件描述符与标识符,文件描述符fd

    这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...

  2. linux存储--文件描述符fd与FILE结构体(二)

    文件描述符fd 对于linux而言,所有对设备(对于linux而言,一切皆文件)和文件的操作都使用文件描述符来进行的. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开文件的记录表. ...

  3. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  4. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析

    本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下. 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进 ...

  5. 存储基础 — 文件描述符 fd 究竟是什么?

    坚持思考,就会很酷 前情概要 通过上篇 Go 存储基础 - 文件 IO 的姿势, 我们看到有两种文件读写的方式,一种是系统调用的方式,操作的对象是一个整数 fd,另一种是 Go 标准库自己封装的标准库 ...

  6. android MemeoryFile和Parcel操作文件描述符fd

    ParcelFileDescriptor pfd; FileDescriptor fd; Parcel p; static byte[] testString = new byte[] {1,2,3, ...

  7. 文件描述符fd和文件指针File* fp的区别和转换

    在linux系统中把设备和普通文件也都看做是文件,要对文件进行操作就必须先打开文件,打开文件后会得到一个文件描述符,它是一个很小的正整数,是一个索引值.  内核会为每一个运行中的进程在进程控制块pcb ...

  8. linux文件描述符泄漏,文件描述符(fd)泄漏排查一篇就够了

    生产多次遇到文件描述符(fd)泄露相关的问题, 文件描述符泄漏一般引起 的现象是文件句柄数(封面图)/tcp alloc(上图)增长.文章分为两部分介绍文件描述符相关内容,第一部分介绍文件描述基础知识 ...

  9. <Linux基础--文件描述符fd、重定向、文件流指针FILE*概念理解>

    文章目录 1.文件描述符fd 2.重定向 3.文件流指针:FILE* 4.动态库和静态库 1.文件描述符fd 文件描述符:实际上就是内核中一个进程打开的文件描述信息数组(file* fd_array[ ...

  10. Linux操作系统~系统文件IO,什么是文件描述符fd?什么是vfs虚拟文件系统

    目录 1.open() (1).第二个参数flags-通过比特位传多组标记 2.文件描述符fd(open函数的返回值) (1).fd的本质 (2).vfs-虚拟文件系统(一切皆文件) (3).调用re ...

最新文章

  1. C#机房重构-datagridview控件的使用
  2. eclipse+pydev添加已存在django项目及其调试方法
  3. mongodb检查点_Mongodb 日志原理和操作
  4. python服务器环境搭建(2)——安装相关软件
  5. 用 Python 分析上网记录,发现了很多不可思议的事
  6. 2021,前方路艰,与君共勉
  7. 最全名企笔试题+算法题
  8. 【HAVENT原创】CentOS 6.5 下 Nginx 的安装与配置
  9. 斐波那契(黄金分割法)查找算法
  10. 你应该知道的10 种跨域解决方案(附终极方案)
  11. Semantic Parsing on Freebase from Question-Answer Pairs【论文笔记】
  12. 自定义纸张重启就没了
  13. zookepper单机集群安装记录
  14. 兼容低功耗MCU和SoC、超低电流消耗 特瑞仕转换器家族再添一员
  15. EffectiveC++-条款54:让自己熟悉包括TR1在内的标准程序库
  16. 对刚装好系统的Linux配置软件开发生产环境,让你开发效率一飞冲天!
  17. HDU 4009 Transfer water (最小树形图+虚根)
  18. css3中var函数
  19. XML生成XSD的方法
  20. 满满的大片既视感,还原 Pwn2Own 黑客大赛首日战况

热门文章

  1. ProEssentials实时三维图表控件
  2. CALL TRANSACTION - bdc_options
  3. 20100422.C#.const VS readonly
  4. Java网络编程从入门到精通(3):为什么不能直接通过IP访问网站
  5. 【有福如林】OpenFlashChart C#flash图形控件的使用
  6. mysql not in语句_MySQL命令
  7. SAP中各种分摊分配方法
  8. 【转】采购订单长文本增强
  9. 【转】SAP地产业正青春
  10. LSMW批处理使用方法(11)_步骤14、15