Linux中select函数及实例,Linux的select函数实例

/*

函数说明:正常每隔一秒打印一个数字,当有fd被设置时,就立刻执行操做。而不是被阻塞住

*/

#include

#include

#include

#include

#include

#include

#include

#include

#define PATH "test.txt"

int T_select(void);

int main(void)

{

int i=0;

for(;i<100;i++)

{

printf("i=%d\n",i);

sleep(1);

T_select();

}

//异步复用IO处理

return 0;

}

int T_select(void)

{

int n =-1,fd = -1;

char buf[100];

fd_set MY_FD_SET;

struct timeval timeout;

//fd = open(PATH,O_RDONLY);

FD_ZERO(&MY_FD_SET);

//FD_SET(fd,&MY_FD_SET);

FD_SET(0,&MY_FD_SET);//换为键盘标准IO输入更形象

timeout.tv_sec = 10;//10S定时

timeout.tv_usec=0;

n = select(0+1, &MY_FD_SET, NULL, NULL, &timeout);

if (n < 0)

{

perror("select");

}

else if(n==0)//10S没有fd设置

{

printf("timeout\n");

}

else//有fd被设置,变为非阻塞式

{

if(FD_ISSET(0,&MY_FD_SET))

{

memset(buf,0,sizeof(buf));

read(0,buf,10);

printf("read files:%s\n",buf);

}

}

return 0;

}

/*

函数原型:

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

功能:select能够根据内部设置的多个fd,那个fd被设置就会去执行相关操做。能够起到异步多路复用IO的功能,提供函数执行效率。select自己是阻塞式的,直到收到有fd被设置才变为非阻塞式。函数

异常:若是在设定时间内,select没有收到fd的返回值,则返回0,表示超时。正常返回最大fd+1的值,出错则返回小于零的负数。code

使用:结合这四个个宏:FD_CLR、FD_ISSET、FD_ZERO、FD_SET。其中FD_ISSET是判断那个fd被设置了。原型

注意:struct timeval timeout;超时时间设置必须在FD_CLR、FD_SET以后,否则会报错,一开始没有注意这个问题,发生离奇的错误,先把struct timeval timeout的值放在FD_CLR、FD_SET以前,报一个select参数不合法,因此写程序的思路仍是要很清晰的。string

*/it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值