Linux下select使用

目录

概述

代码示例

示例1

示例2

select 的优缺点

优点

缺点

适用场景


概述

在Linux中,select 是一个经典的IO多路复用函数,用于监控多个文件描述符(file descriptors)的状态变化(如可读、可写或异常)。它允许程序同时等待多个文件描述符,并在其中任何一个文件描述符就绪时返回。

函数原型

#include <sys/select.h>

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

参数说明:

  1. nfds

    • 需要监控的文件描述符的最大值加 1。

    • 例如,监控的文件描述符是 0、1、2,则 nfds 应为 3。

  2. readfds

    • 指向一个 fd_set 类型的文件描述符集合,用于监控是否有数据可读。

    • 如果为 NULL,则表示不监控读事件。

  3. writefds

    • 指向一个 fd_set 类型的文件描述符集合,用于监控是否可写。

    • 如果为 NULL,则表示不监控写事件。

  4. exceptfds

    • 指向一个 fd_set 类型的文件描述符集合,用于监控是否有异常事件。

    • 如果为 NULL,则表示不监控异常事件。

  5. timeout

    • 指向 struct timeval 结构体,用于设置超时时间。

    • 如果为 NULL,则表示阻塞等待,直到有文件描述符就绪。

    • 如果设置为 0,则表示非阻塞,立即返回。

返回值:

  • 成功:返回就绪的文件描述符的总数。

  • 超时:返回 0。

  • 错误:返回 -1,并设置 errno

fd_set 相关操作函数

fd_set 是一个文件描述符集合,通常通过以下宏来操作:

  • FD_ZERO(fd_set *set):清空集合。

  • FD_SET(int fd, fd_set *set):将文件描述符 fd 添加到集合中。

  • FD_CLR(int fd, fd_set *set):将文件描述符 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W说编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值