linux下的各种I/O多路复用详解---select/poll/epoll

多路复用技术是一种通过共享物理信道实现多路信号传输的通信技术,其核心原理是利用复用器将多路信号合成单一信号传输,接收端通过分用器分离还原。该技术主要包括频分复用(FDM)、时分复用(TDM)、波分复用(WDM)、码分多址(CDMA)和空分多址(SDMA)等类型,其中FDM通过划分频段实现ADSL数据传输,TDM采用时分片机制支持T1载波传输,WDM通过不同波长光信号在光纤中实现双向通信。(该部分来源于百度百科)

select的概念和原理

select 是一种事件通知机制,通常用于阻塞式 I/O 操作中,它允许程序在多个文件描述符上进行监视,一旦某个文件描述符变得可读、可写或出现异常,select 会通知程序进行相应的处理。

select 会在多个文件描述符上设置监视(例如,读、写、异常状态),然后它会阻塞程序,直到以下事件之一发生:

  • 读事件:某个文件描述符准备好读取数据(如套接字接收到数据)。
  • 写事件:某个文件描述符准备好写入数据(如套接字可以发送数据)。
  • 异常事件:文件描述符处于异常状态(如套接字连接关闭)。

select 会返回发生事件的文件描述符列表,程序可以通过这些文件描述符来进一步处理数据。

select原型

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  • nfds:最大文件描述符值加1。通常可以传入所有需要监视的文件描述符的最大值加1。
  • readfds:用于监视哪些文件描述符可以读取(即数据已准备好读取)。
  • writefds:用于监视哪些文件描述符可以写入。
  • exceptfds:用于监视哪些文件描述符发生了异常。
  • timeout:指定等待事件的最长时间。如果为 NULL,则 select 会阻塞直到有事件发生;如果设置为 0,则为非阻塞模式;否则,设置为一个 timeval 结构体表示的超时时间。

select的使用

struct timeval timeout;
timeout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值