标签:
select
#include <sys/select.h>
void FD_CLR(int fd, fd_set *set);
int FD_ISSET(int fd, fd_set *set);
void FD_SET(int fd, fd_set *set);
void FD_ZERO(fd_set *set);
int select(int nfds, fd_set *readfds, fd_set * writefds, fd_set *exceptfds, struct timeval *timeout);
int pselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);
struct timeval{
long tv_sec;
long tv_usec;
};`
struct timespec {
long tv_sec;
long tv_nsec;
};
同时监听多个阻塞的文件描述符(如多个网络连接),任一文件有数据就返回。
nfds;所关心的最大fd+1.
readfs:传入:关心的可读文件;传出:实际可读文件。
timeout:1)NULL死等;2)tv_sec=0,tv_usec=0,立即返回,0s,不等;3)tv_sec=n,tv_usec=m;有限等。
失败:-1;无设备可用:0;有设备可用,返回正数,所有可读fd数目之和。
注: Some code calls select() with all three sets empty, nfds zero, and a non-NULL timeout as a fairly portable way to sleep with subsecond precision.
可读:1)有数据;2)关闭连接;3)有新的连接请求(监听socketfd)。
可写:1)无流量控制;2)关闭连接。
异常:1)收到紧急数据。
标签:
原文地址:http://www.cnblogs.com/embedded-linux/p/5023783.html