IO復用 select系統呼叫

2021-08-19 18:21:20 字數 1042 閱讀 6207

1、select函式

此函式用於在一段時間內,監聽使用者感興趣的檔案描述符上的可讀、可寫和異常等事件。

#includeint select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout)
fd_set結構體中是乙個整型陣列,該陣列中的每乙個元素的每一位標識乙個檔案描述符。fd_set能容納的檔案描述符數量由fd_setsize指定。使用下列巨集來訪問fd_set結構體中的位:

fd_zero(fd_set* fdset)              //清除fdset的所有位

fd_set(int fd, fd_set* fdset) //設定fdset的fd位

fd_clr(int fd, fd_set* fdset) //清除fdset的fd位

int fd_isset(int fd, fd_set* fdset) //檢測fdset的位fd是否被置位

struct timeval結構定義如下:

struct timeval

2、網路程式設計中檔案描述符就緒條件

可讀:可寫:

3、select異常處理

select能處理的異常只有一種,即socket上接收到帶外資料。帶外資料的處理可參見下面的程式示例。

4、程式示例

void worker(int connfd)  //引數為與客戶側連線的socket

if(fd_isset(connfd, &read_fds))

//處理資料**

}//對於異常事件,採用帶msg_oob標誌的recv函式來讀取帶外資料

else if(fd_isset(connfd, &exception_fds))

//處理帶外資料**

}} close(connfd);

return;

}

I O復用 select系統呼叫

先上 伺服器 ser.c include include include include include include include include include include define max 1024 int main fds 0 listenfd 第乙個放listenfd,之後的全...

I O多路復用之select系統呼叫

i o多路復用模型允許我們同時等待多個套接字描述符是否就緒。linux系統為實現i o多路復用提供的最常見的乙個函式是select函式,該函式允許程序指示核心等待多個事件中的任何乙個發生,並只有在乙個或多個事件發生或經歷一段指定的時間後才喚醒它。作為乙個例子,我們可以呼叫select,告知核心僅在下...

I O復用的方式之一select系統呼叫

來自 linux高效能伺服器程式設計 i o復用是用來解決監聽多個描述符上是否有就緒事件的系統呼叫。具體包含以下幾種情況 客戶端程式同時處理多個監聽套接字socket 客戶端要同時處理使用者輸入和網路連線 tcp伺服器要同時處理多個描述符 伺服器要同時處理tcp請求和udp請求 伺服器要同時監聽多個...