引述chinaunix ID“大富大贵”的话来解释select的原理:“就像一个人要睡觉了同时叫10个人在他们需要帮忙的时候叫他一样。每个人都要决定什么时候叫醒他。如果没有叫醒,那么最后他自己定的闹钟会叫醒他(就是那个时间参数)”。
int read_char_with_timeout(int fd, int timeout ,char *cp)
{
fd_set rfd;
struct timeval tmo;
tmo.tv_sec = timeout/1000000;
tmo.tv_usec = timeout % 1000000;
FD_ZERO(&rfd);
FD_SET(fd,&rfd);
if(select(fd+1, &rfd,NULL,NULL,&tmo) <= 0)
return E_L_TIME_OUT;
if(read(fd,cp,1) != 1)
return E_L_EXCEPTION;
else
return 0;
}