文件描述符(就是整数)用于在一个进程内唯一的标识打开的文件。这假定了内核能够在用户进程的描述符和内核内部使用的机构之间,建立一种关联。(深入linux内核架构)
由于唯一标识进程的结构就是PCB(文件控制块),那么文件描述符肯定在进程控制块当中。这个进程控制块在linux系统中叫做task_struct。
struct task_struct
{
...
struct files_struct *files; //打开文件信息
...
}
task_struct 中的 files_struct 就是进程开打文件的信息
files_struct
{
...
struct file *fd_array[NR_OPEN_DEFAULT];// NR_OPEN_DEFAULT是内核允许每个进程打开的文件数。
...
}
其中fd_array每个数组项指向一个file结构的实例,管理一个打开文件的打开信息。
那么fd_array的下标就被称为文件描述符。
文件流(iostream)被实现为指向结构FILE的指针(linux程序设计),属于标准I/O库。
文件流的优势是提供了缓冲,减少了使用read和write系统调用的次数,这样可以减少用户态与核心态切换的开销。
所以我认为,流就是对文件描述符和缓冲的一个封装。