#include
#include
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const timeval *timeout);
*timeout: 1,null,永遠等待;2,等待固定時間(tv_sec,tc_usec);3,不等待(tv_sec=tc_usec=0)
struct timeval{
long tv_sec; 秒數
long tv_usec; 微秒數
*readset,*writeset,*exceptset;核心測試 讀、寫、異常的descriptor
fd_set:long int 陣列 fd_set集合通過以下四個巨集操作
1,void fd_zero(fd_set *fdset); 清空集合
2,void fd_set(int fd,fd_set *fd_set); 新增fd到集合
3,void fd_clr(int fd,fd_set *fd_set); 刪除fd從集合中
4,int fd_isset(int fd,fd_set *fdset); 測試fd是否在集合中
maxfdp1:最大file descriptor plus 1
函式返回後:未就緒descriptor對應的位均清0,所以每次呼叫select()函式,都需要設定fd_set集合。
返回已就緒的總位數;0,都未就緒;-1,出錯
descriptor就緒條件
條件可讀嗎?
可寫嗎?
異常嗎?
有資料可讀
1讀半關閉
1(eof)
給監聽套介面準備好新連線
1有空間可寫
1寫半關閉
1(sigpipe)
待處理錯誤
1(-1,errno)
1(-1,errno)
tcp帶外資料
1可讀/可寫可設定低水位標記(so_rcvlowat/so_sndlowat)預設(1/2048)
#include
int shutdown(int fd,int howto)
howto:1,shut_rd 讀半關閉; 2,shut_wr 寫半關閉; 3,shut_rdwr 讀寫半關閉,即全關閉;
return 0/-1
linux select函式用法
select系統呼叫是用來讓我們的程式監視多個檔案控制代碼的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有乙個或多個發生了狀態改變。關於檔案控制代碼,其實就是乙個整數,我們最熟悉的控制代碼是0 1 2三個,0是標準輸入,1是標準輸出,2是標準錯誤輸出。0 1 2是整數表示的,...
linux select函式用法
select系統呼叫是用來讓我們的程式 監視多個檔案控制代碼的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有乙個或多個發生了狀態改變。關於檔案控制代碼,其實就是乙個整數,我們最熟悉的控制代碼是0 1 2三個,0是標準輸入,1是標準輸出,2是標準錯誤輸出。0 1 2是整數表示的...
Linux select函式詳解
我們所關心的檔案描述符 對每個描述符,我們所關心的狀態。我們是要從乙個檔案描述符中讀或者寫,還是關注乙個描述符中是否出現異常 我們要等待多長時間。我們可以等待無限長的時間,等待固定的一段時間,或者根本就不等待 有了這些返回資訊,我們可以呼叫合適的i o函式 通常是read或 write 並且這些函式...