鍒╃敤select鍑芥暟鍙互瀹屾垚闈為樆濉為氫俊錛屽畠鍙互鍦ㄧ敤鎴鋒寚瀹氱殑鏃墮棿鍐呯洃鍚竴浜涘彞鏌勶紙鏂囦歡鎻忚堪絎︼紵錛夛紙涓涓彞鏌勫氨鏄綘緇欎竴涓枃浠訛紝璁懼錛屽鎺ュ瓧(socket)鎴栫閬撶殑涓涓悕瀛? 浠ヤ究甯姪浣犺浣忎綘姝e鐞嗙殑鍚嶅瓧, 騫墮殣钘忔煇浜涚紦瀛樼瓑鐨勫鏉傛с傦級錛屽綋readfds鎴杦ritefds涓槧璞$殑鏂囦歡鍙鎴栧彲鍐欐垨瓚呮椂錛屾湰嬈elect()灝辯粨鏉熻繑鍥炪傜▼搴忓憳鍒╃敤涓緇勭郴緇熸彁渚涚殑瀹忓湪select()緇撴潫鏃朵究鍙垽鏂摢涓鏂囦歡鍙鎴栧彲鍐欍?/p>
銆?/p>
鍑芥暟鍘熷瀷錛?
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
ndfs錛歴elect鐩戣鐨勬枃浠跺彞鏌勬暟錛岃榪涚▼涓墦寮鐨勬枃浠舵暟鑰屽畾,涓鑸涓轟綘瑕佺洃瑙嗗悇鏂囦歡
涓殑鏈澶ф枃浠跺彿鍔犱竴銆?
readfds錛歴elect鐩戣鐨勫彲璇繪枃浠跺彞鏌勯泦鍚堛?
writefds: select鐩戣鐨勫彲鍐欐枃浠跺彞鏌勯泦鍚堛?
exceptfds錛歴elect鐩戣鐨勫紓甯告枃浠跺彞鏌勯泦鍚堛?
timeout錛氭湰嬈elect()鐨勮秴鏃剁粨鏉熸椂闂淬?/p>
鍑芥暟榪斿洖鍊鹼細
0琛ㄧず瓚呮椂
-1琛ㄧず鍑洪敊
姝f暟琛ㄧず鏂囦歡鍙鎴栧彲鍐?/p>
鐩稿叧鐨勫畯錛?/strong>
FD_ZERO(fd_set *fdset)錛氭竻絀篺dset涓庢墍鏈夋枃浠跺彞鏌勭殑鑱旂郴銆?
FD_SET(int fd, fd_set *fdset)錛氬緩绔嬫枃浠跺彞鏌刦d涓巉dset鐨勮仈緋匯?
FD_CLR(int fd, fd_set *fdset)錛氭竻闄ゆ枃浠跺彞鏌刦d涓巉dset鐨勮仈緋匯?
FD_ISSET(int fd, fd_set *fdset)錛氭鏌dset鑱旂郴鐨勬枃浠跺彞鏌刦d鏄惁鍙鍐欙紝褰?gt;0琛ㄧず鍙鍐欍?/p>
select鍙兘鐩戝惉鏂囦歡鎻忚堪絎︼紙file descriptors錛夛紝鏂囦歡鎸囬拡鏄笉琛岀殑銆傞氳繃int fileno(FILE* fp)鍑芥暟鍙互瀹屾垚鏂囦歡鎸囬拡鍒版枃浠舵弿榪扮鐨勮漿鎹€?/p>
浠g爜鐗囨錛戯細鍦ㄦ寚瀹氭椂闂村唴璇誨彇stdin鐨勬暟鎹?/p>
浠g爜鐗囨錛掞細鏈嶅姟鍣ㄥ湪涓瀹氭椂闂村唴鎺ユ敹瀛愯妭鐐瑰彂鏉ョ殑鏁版嵁鎶ャ?/p>