linux select函式 shutdown函式

2022-09-03 18:39:10 字數 1172 閱讀 7609

#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 並且這些函式...