int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set*exceptfds, struct timeval *timeout);
voidfd_clr(int fd, fd_set *set);
int fd_isset(int fd, fd_set *set);
voidfd_set(int fd, fd_set *set);
voidfd_zero(fd_set *set);
1.select 函式是阻塞的,具體測試方法如下:
執行下面程式
#./client192.168.60.123
#ps -e -o fname,wchan | grep client
client_spoll_schedule_timeout
程序阻塞在 select函式
2.三個引數readfds,writefds,exceptfds即作為輸入引數,有作為輸出引數。
這樣引數需要特別注意,當每次呼叫該函式,需要重新清零,並且重新初始化。下面**說明:
while(1)
3.如果要構造更加精確超時機制,可以修改mysleep函式,達到毫秒級別。
intmysleep(unsigned int seconds)
4.理解可讀,可寫,異常描述符生效條件。
#############################################client.c
#include
#include
#include
#include
#include
#include
#include
#include
#define maxsize 256
#define fname "test"
void sigpipe_info(int signo)
void setup_signal(void)
int mysleep(unsigned int seconds)
int main(int argc, char*argv)
setup_signal();
if((sockfd = socket(af_inet, sock_stream, 0)) < 0)
bzero(&servadd,sizeof(servadd));
servadd.sin_family = af_inet;
servadd.sin_port = htons(9999);
servadd.sin_addr.s_addr=inet_addr(argv[1]);
if(connect(sockfd, (struct sockaddr *)&servadd, sizeof(servadd)) < 0)
while (1)
if (fd_isset(0,&rfds))
if((ret = write(sockfd,buf,strlen(buf))) < 0 )
printf("input:%s",buf);
}if(fd_isset(sockfd,&rfds))
if (ret == 0) // socket eof
else}}
return -1;
}###################################server.c
#include
#include
#include
#include
#include
#include
#include
#define maxsize 256
void reap_child( int signo)
return ;
}int main()
}close(connfd);
return 0;
default:
close(connfd);
break;}}
return 0;
}
linux select函式用法
select系統呼叫是用來讓我們的程式監視多個檔案控制代碼的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有乙個或多個發生了狀態改變。關於檔案控制代碼,其實就是乙個整數,我們最熟悉的控制代碼是0 1 2三個,0是標準輸入,1是標準輸出,2是標準錯誤輸出。0 1 2是整數表示的,...
linux select函式用法
select系統呼叫是用來讓我們的程式 監視多個檔案控制代碼的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有乙個或多個發生了狀態改變。關於檔案控制代碼,其實就是乙個整數,我們最熟悉的控制代碼是0 1 2三個,0是標準輸入,1是標準輸出,2是標準錯誤輸出。0 1 2是整數表示的...
Linux select函式詳解
我們所關心的檔案描述符 對每個描述符,我們所關心的狀態。我們是要從乙個檔案描述符中讀或者寫,還是關注乙個描述符中是否出現異常 我們要等待多長時間。我們可以等待無限長的時間,等待固定的一段時間,或者根本就不等待 有了這些返回資訊,我們可以呼叫合適的i o函式 通常是read或 write 並且這些函式...