关于select函数的使用

本文详细介绍了select函数的使用方法,包括函数原型、参数解释及其在Windows和VxWorks操作系统中的应用。通过实例展示了如何设置关注的文件描述符以及如何判断它们是否可读或可写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天上午使用select函数,狠查了一番,又实践了windows和vxworks两种操作系统,函数的使用是一样的。现在记下以备注,以后可能还要修改。

 

首先,查看函数原型:

int select

(

int width, /* number of bits to examine from 0 */

fd_set * pReadFds, /* read fds */

fd_set * pWriteFds, /* write fds */

fd_set * pExceptFds, /* exception fds (unsupported) */

struct timeval * pTimeOut /* max time to wait, NULL = forever */

)

width,即是socket的最大值+1,其最大限2048,fd_set是一个256的数组,每一位表示一个socket,256*8=2048

pTimeOut:函数调用的超时时间

在我们调用select函数之前,有两个宏必须调用:
fd_set readfds;
FD_ZERO(&readfds);//clear 
FD_SET(fd,&readfds);//关注readfds中fd位置上的值
在select函数成功后,select(x.tcplistenfd+1,&readfds,&wrtfds,NULL,&tv);
调用
FD_ISSET(fd,&readfds);如果成功说明fd上可读
FD_ISSET(fd,& wrtfds);如果成功说明fd上可写
要记住以下代码是一个整体:
{
fd_set readfds;
FD_ZERO(&readfds);//clear 
FD_SET(fd,&readfds);//关注readfds中fd位置上的值
FD_ZERO(&wrtfds);
FD_SET(x.tcplistenfd,&wrtfds);
select(x.tcplistenfd+1,&readfds,&wrtfds,NULL,&tv);
}
每一次select之前都必须初始化,因为在select后,会清楚你所关注的位,必须重新置上。
否则的话,在调用第二次时会产生错误号10028(windows中)。
先写到这,这两天准备写一下windows,vxworks的TCP函数。写完了再写上来。



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值