Select
[轉貼] Checko's Blog
同時Monitor一個以上的file descriptor (fd)
通常這個動作都不在處理一般的檔案,而著重在處理通訊相關的檔案(如stream,socket,tty)
使用select()或poll()
1. select
select()要配合一組針對fd_set結構的bit operation,通常用define來作:
fd_set set;
FD_ZERO(&set); /*將set 清除為0 */
FD_SET(fd, &set); /*將fd加入set中 */
FD_CLR(fd, &set); /*將fd由set中移除*/
FD_ISSET(fd, &set); /*檢查fd是否在set中,return true if exist */
select()的prototype:
select可以作三種動作,針對三個不同的fd_set:
int select( int nfds, fd_set *readset, fd_set *writeset, fd_set *exceptset, struct timeval *timeout)
nfds
三組fd_set包含的fd中,數目最大的那一個fd,再+1 (ref: Example below )
readset
檢查可讀
writeset
檢查可寫
exceptset
檢查意外
timeout
檢查的最長等待時間
NULL代表永遠
timeval 變數代表時間
timevale變數的tv_sec和tv_usec都是0代表立即返回,不等待
select()的返回值代表符合檢查狀態的fd總數,並且傳入的三組fd_set都會被修改,程式在取得這個總數後,再用FD_ISSET找出三組 fd_set被修改的fd。
ref:
Checko's Blog
沒有留言:
張貼留言