目录
文件描述符简介
在进程中,每打开一个文件,操作系统就会创建相应的数据结构来描述这个文件,这就是描述文件的文件结构体,同时,在进程的PCB中,会有一个struct files_struct *files的指针,它实际上是指向一个指针数组,而这个指针数组中就存放了每个打开的文件的指针,而所谓的文件描述符,就是这个指针数组的下标,根据文件描述符就能找到对应的文件的指针,就能对该文件进行操作了。在文件描述符进行分配时,会找到当前没有被使用的最小的下标,作为新的文件描述符。其中,0,1,2分别对应标准输出文件描述符,标准输出文件描述符和标准错误文件描述符。因此当打开其他文件时,分配的文件描述符实际上是从3开始的。
select模型理解
在前面提到的多进程和多线程来实现服务端与客户端通信中,不管是多进程还是多线程,一般来说,每一个连接成功的文件描述符(socket)都需要一个进程/线程来进行监控,然后就需要不断的对每个进程/线程中的文件描述符进行轮询,例如accept、read等函数,如果没有连接请求、缓冲区中没有数据,它们就会一直阻塞住。这样一来