跳轉到內容

C 程式設計/POSIX 參考/unistd.h/select

來自華夏公益教科書,開放的書籍,共建一個開放的世界

select 是一個 系統呼叫應用程式程式設計介面 (API) 用於 類 UnixPOSIX 相容的作業系統,用於檢查 檔案描述符 的狀態,即開啟的輸入/輸出通道。select 系統呼叫類似於 UNIX System V 及其後來的作業系統中引入的 poll 功能。

C 程式語言 原始碼中,select 系統呼叫在標頭檔案 sys/select.h 或 unistd.h 中宣告,語法如下

int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct timeval* timeout);
引數 描述
nfds 所有集合中最大檔案描述符加 1
readfds fd_set 型別,包含要檢查是否可讀的檔案描述符,並在輸出中指示哪些檔案描述符可讀。可以為 NULL。
writefds fd_set 型別,包含要檢查是否可寫檔案描述符,並在輸出中指示哪些檔案描述符可寫。可以為 NULL。
errorfds fd_set 型別,包含要檢查是否有待處理的錯誤條件的檔案描述符,並在輸出中指示哪些檔案描述符有待處理的錯誤條件。可以為 NULL。
timeout struct timeval 型別結構,指定選擇完成的最大等待時間間隔。如果 timeout 引數指向一個成員為 0 的 struct timeval 型別物件,select() 不會阻塞。如果 timeout 引數為 NULL,select() 將阻塞,直到事件導致其中一個掩碼返回一個有效(非零)值。

fd_set 型別 引數可以使用四個實用程式宏進行操作:FD_SET()、FD_CLR()、FD_ZERO() 和 FD_ISSET()。

Select 返回 readfdswritefdserrorfds 中設定的位總數,如果超時則返回 0,如果出錯則返回 -1。

select 中使用的檔案描述符集的大小是有限的,具體取決於作業系統。更新的系統呼叫 poll 提供了更靈活的解決方案。

另請參閱

[編輯 | 編輯原始碼]
[編輯 | 編輯原始碼]
華夏公益教科書