- 这篇博客很长,希望你能看完,是我自己对文件描述符的一些理解,希望能帮助到你
文件描述符
什么是文件描述符
- 文件描述符是操作系统在进行进程文件管理时,所引入的一种管理方法,这种管理方法是 先描述文件的一系列信息,然后再通过这个文件描述符,进行文件的一些列读写操作
文件描述符在进程中是如何存储的
- 在进程的PCB中,有专门寸出文件描述符的位置。
- 在PCB中,有一个*files 的指针,这个指针指向一个名叫 files_struct 的指针数组,这里这个指针数组里存储的就是指向不同文件的指针,既然是一个数组,那就可以通过下标进行数组元素的访问,所以,这里数组的下标的值,就是文件描述符的值。
- 在linux中,一切皆文件,在计算机当中,我们最常接触的就是标准输入和标准输出,还有标准错误输出,这三个在linux中都是以文件的形式存在的,一个进程在开辟的时候,会自动打开这三个文件,存放在 0 1 2 的下标的位置,所以,这三个对应 标准输入,标准输出,标准错误输出。
- 我们如果在进程中打开文件的时候,系统就会在这个进程的files_struct中添加进对应的文件的指针,然后返回这个文件指针对应的文件描述符,也就是这个文件的下标。我们在进行文件读写操作的时候,如果我们调用的是系统提供的读写操作接口的话,就势必需要使用文件描述符进行操作。(注意,是系统提供的接口,我们在学习语言的时候,其实是通过语言所提供的接口,而非操作系统所提供的接口)这里我画了一个图,帮助你理解系统调用和函数库调用
- 系统调用接口,正是绕过了语言所提供的库函数接口,实现了直接面向操作系统的文件操作
文件描述符的一系列操作
- 如果要直接用文件描述符对文件进行读写操作的话,就需要调用系统提供的接口,系统提供的接口主要有一下几个
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(const char* pathname, int flag