学科分类
目录
Linux编程

文件描述符

文件描述符(File Descriptor)是一个非负整数,它实质上是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。文件描述符的有效范围是0到OPEN_MAX,OPEN_MAX是进程最多可以打开的文件的数量,虽说系统内存有多少内存就能打开多少文件描述符,但为了避免出现一个进程消耗所有文件资源的情况,系统会对单个进程(进程是系统分配资源的基本单位,是一个程序在内存中的一次运行过程,计算机中的操作一般都是由进程发起的,此处用户对进程有个概念即可,详细概念将在第六章中讲解)可打开的文件数量做出限制,默认值一般为1024。

系统为每一个进程维护了一个文件描述符表(open file description table),用于存储进程打开文件的文件描述符,表中的数值从0开始,0~2号在程序启动时被系统标准文件(标准输入、标准输出和标准错误文件)占用,因此进程打开的普通文件其文件描述符从3开始。不同的文件描述符可以指向同一个文件,对于多个进程而言,数值相同的文件描述符可以指向不同的文件。

存在于进程中的文件描述符是进程级别的,除此之外,内核也对所有打开的文件维护了一个文件描述符表,这是一个系统级的文件描述符表,该表又称打开文件表(open file table),表中的记录被称为打开文件句柄(open file handle)。一个打开文件句柄中与一个已打开文件相关的信息如下所示:

● 当前文件偏移量;

● 打开文件时所用的状态标识;

● 文件访问模式;

● 与信号驱动相关的设置;

● 对该文件inode对象的引用;

● 文件类型和访问权限;

● 指向该文件所持有的锁列表的指针;

● 文件的各种属性信息。

相同的文件可以被不同的进程打开,也可以在一个进程中打开多次,每个文件描述符都会与一个已打开的文件对应,不同的文件描述符也可以指向同一个文件。两个不同的文件描述符,若指向同一个打开文件句柄,那么它们将共享同一文件偏移量,当通过其中一个文件描述符对一个文件偏移量进行修改时,另一个文件描述符也能察觉到文件偏移量的变动。

点击此处
隐藏目录