引述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;
}