MST

星途 面试题库

面试题:C语言中poll机制与select在文件描述符管理上的差异

在C语言中,基于Linux环境,简要阐述poll机制与select在文件描述符管理方面有哪些不同点,比如对文件描述符数量的限制、数据结构的使用等。
38.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  • 文件描述符数量限制
    • select:在传统实现中,select对文件描述符数量有限制,通常受限于FD_SETSIZE,一般为1024。虽然在一些现代系统中可以通过修改内核参数等方式扩大,但这种方式并不通用。
    • pollpoll理论上对文件描述符数量没有限制,它基于链表结构管理文件描述符,所以其可处理的文件描述符数量仅受限于系统资源(如内存等)。
  • 数据结构使用
    • select:使用fd_set数据结构,它本质上是一个位图,通过设置不同的位来表示文件描述符的状态。在每次调用select时,需要将所有关注的文件描述符集合(读、写、异常)拷贝到内核空间,返回后又要从内核空间拷贝回用户空间,这种操作在文件描述符较多时开销较大。
    • poll:使用pollfd结构体数组,每个pollfd结构体包含文件描述符、事件掩码和返回的事件掩码。poll将结构体数组传递给内核,内核修改其中的返回事件掩码,无需像select那样来回拷贝整个文件描述符集合,减少了数据拷贝开销。