Linux 系统编程之select

Linux 系统编程之select

select 允许单个程序监听多个文件描述符,直到一个或者多个文件描述符准备就绪不阻塞系统,常常用于解决阻塞型的程序

相关代码

/* According to POSIX.1-2001 */
#include <sys/select.h>

/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
//nfds:集合的最大值 + 1
//readfds:监测fds中可读的fd
//writefds:监测fds中可写的fd
//exceptfds:fds中异常的fd  如果没有可监视对应类的文件描述符,可把这三个置NULL
//timeout:指定select阻塞等待文件描述符的时间 0:不阻塞等待,立即返回  NULL:无限期阻塞等待  
//return: fail:-1 sucess: 包含在fds中fd 超时:0
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

void FD_CLR(int fd, fd_set *set);	//把fd从集合中移除
int  FD_ISSET(int fd, fd_set *set);	//判断fd是否在集合中
void FD_SET(int fd, fd_set *set);	//添加fd到集合中
void FD_ZERO(fd_set *set);			//清空集合

#include <sys/time.h>
struct timeval {
    long    tv_sec;         /* seconds */
    long    tv_usec;        /* microseconds */
};

example

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int	main(int argc, char *argv[])
{
	fd_set fds;
    struct timeval timeout;
    int ret;
    
    FD_ZERO(&fds);
    FD_SET(0, &fds);
    timeout.tv_sec = 1;
    timeout.tv_usec = 0;
 
    ret = select(1, &fds, NULL, NULL, &timeout);
    if(ret == -1)
        perror("select fail");
    else if(ret == 0)
        perror("select timeout");
    else {
        printf("start read fata");
        #判断fd是否在fds中 开始处理
        FD_ISSET(0, &fds);
    }
        
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值