文件描述符
- 文件描述符是一个非负整数,Linux用文件描述符来标识每个文件对象,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
本篇文章主要围绕下图进行讲解
流程
首先当有一个进程创建时,操作系统的核心部分kernel会为之创建PCB,PCB中存在文件描述符表(file struct 整型数组,文件描述符类似枚举类型),文件描述符默认前三位分别对应为三种流(输入、输出、错误),当有新的文件创建时,文件描述符会自动加1,代表文件指针file*,文件指针指向一个结构体,里面存放三种类型数据如图。
kernel
- Linux内核核心部分,主要负责管理存储器、文件、外设、系统资源等
PCB
- 系统用于维护进程的结构体
- 操作系统为了方便管理进程,为每个进程创建PCB
- PCB结构体中,存在file struct(文件描述符表,是一个int数组),其中对应序号(int)存放有三种流和文件指针file*,file指向磁盘文件
标准输入输出流
- 头文件 #include <unistd.h>
文件描述符 | 标准流 | 描述 |
---|---|---|
0 | stdin | 标准输入流 |
1 | stdout | 标准输出流 |
2 | stderr | 标准错误流 |