select系統呼叫 檔案描述符就緒條件

2021-07-10 23:17:57 字數 928 閱讀 8158

select系統呼叫原型如下:

#include 

intselect(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout);

引數readfds, writefds, exceptfds引數分別指向可讀、可寫和異常事件對應的檔案描述符集合。

哪些情況下檔案描述符可以被認為是可讀、可寫或者出現異常,對於select的使用非常關鍵。

在網路程式設計中,下列情況下socket可讀

1、socket核心接收快取區中的位元組數大於或等於其低水位標記so_rcvlowat。此時可以無阻塞地讀該socket,並且讀操作返回的位元組數大於0。

2、socket通訊對方關閉連線。此時對該socket讀操作將返回0。

3、監聽socket上有新的連線請求。

4、socket上有未處理的錯誤。此時我們可以使用getsockopt來讀取和清除該錯誤。

下列情況下socket可寫:

1、socket核心傳送緩衝區中的可用位元組數大於或等於其低水位標記so_sndlowat。此時我們可以無阻塞寫該socket,並且寫操作返回的位元組數大於0。

2、socket寫操作被關閉。對寫操作被關閉的socket執行寫操作將觸發乙個sigpipe訊號。

3、socket使用非阻塞connect連線成功或者失敗(超時)之後。

4、socket上有未處理的錯誤。此時我們可以使用getsockopt來讀取和清除該錯誤。

網路程式中,select能處理的異常情況只有一種:socket上接收到帶外資料。

《linux高效能伺服器程式設計》

系統呼叫 初步了解檔案描述符

在學習作業系統之前,我們在操作檔案時會使用一些c介面,比如說,fwrite fread fopen fclose 這些,但是除了這些c介面 其他語言也有 我們還可以使用一些系統呼叫介面來進行檔案訪問。例如 寫檔案 write 實現 include include include include in...

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...

linux系統檔案描述符

了解個東西叫fd 檔案描述符,也就是window系統下的hwnd控制代碼。fd 是用乙個數字表示的。系統中維護了每個使用者,程序,系統級別的使用者檔案描述符數量許可權限制,即乙個程序可以開啟多少個檔案描述符,乙個使用者可以可以開啟多少個檔案描述符,乙個程序可以開啟多少個檔案描述符。以下命令可以檢視系...