文件描述符

现有文件a存储在磁盘中,我们需要对文件a实现一些操作。

当程序运行起来,操作系统中就有了对应程序的进程,操作系统通过进程控制块【PCB】实现对该进程的管理。

在PCB里有一个【指针】,指向一个专门管理进程已打开文件的结构体struct files_struct,在这个文件管理结构体里面又有一个文件信息描述结构体指针数组struct file* array[],该数组里存储着该进程所有已打开文件对应的struct file结构体的地址,既然是数组,必然有【索引】,而这个索引值正是对应文件的【文件描述符】
文件描述符_第1张图片

那么struct file结构体如何得到呢?

当我们使用open/fopen时,操作系统就会为目标文件创建这个结构体。

简而言之,文件描述符就是内核中进程打开的文件对应的文件描述信息数组的索引

如果拿到这个索引,那么进程就能访问文件信息描述数组对应位置的内容(一个结构体指针),进而顺着这个指针找到该文件对应struct file结构体,实现对文件的操作。

当然文件信息描述结构体指针数组不止这4个空间啦。
一般来说,0号索引是stdin默认文件描述符,1号索引是stdout默认文件描述符,2号是stderr默认文件描述符。

既然是默认当然能改!改的操作就叫重定向喽!这一篇就记录一下文件描述符⑧

你可能感兴趣的:(linux,linux)