linux socket select 函式分析

2021-04-20 21:16:08 字數 1299 閱讀 4594

linux socket select 函式分析

#include 

void

fd_clr(fd, fd_set *fdset);

void

fd_copy(fd_set *fdset_orig, fd_set *fdset_copy);

intfd_isset(fd, fd_set *fdset);

void

fd_set(fd, fd_set *fdset);

void

fd_zero(fd_set *fdset);

intselect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds,

fd_set *restrict errorfds, struct timeval *restrict timeout);

首先分析一下 fd_set, fd_set 即file descriptor set,它是集合,在它裡面可以儲存多個file descriptor,即檔案描述符。

所以,fd_set函式就是把第乙個引數fd 這個檔案描述符放到   fd_set所指的這個集合中。

其他的幾個函式(除了select 函式)看函式名就能明白了。

下面說一下select 函式的理解,

select 函式是用來測試判斷的(估計描述的不準確),它測試

readfds, writefds ,errorfds 這幾個fd_set中是否有相應的處於ready 狀態的file descriptors.   如果有,select 的返回值就是處於ready 狀態下的read, write , error pending的

file descrptors 的總數。 如果沒有,則返回0, 如果出錯,返回-1.

nfds: 是要測試的每乙個fd_set中的開始nfds個file descriptors.

比如, read fd set 中有3個descriptors, write fd set 有5 個descriptors, ... ,nfds為2的話, 那就是各測試readfds, writefds,和errorfds的前面2個desctriptors.

select 執行結束,readfds ,writefds, errorfds被處於ready狀態下的file descriptors set替換掉了。

以上就是我的理解,還望糾正,不勝感激。

今後將陸續翻譯一些linux 開發方面api技術文件,不過不會純粹的翻譯,只是自己的讀過後理解而已。

參考**:http://rhoden.id.au/doc/sockets2.html

python的函式分類 Python函式分類及操作

1 定義函式 2 def func1 3 testing 4 print in the func1 5 return 0 7 定義過程 8 def func2 9 testing2 10 print in the func2 12 呼叫函式 13 x func1 15 呼叫過程 16 y func2...

函式分享 每日PHP函式分享 2021 2 4

array chunk將乙個陣列分隔成多個 array chunk array array,int size,bool preserve keys false array將乙個陣列分隔成多個陣列,其中每個陣列的單元數目有size決定。最後乙個陣列的單元資料可能會少於size個。引數 array 需要...

函式分享 每日PHP函式分享 2021 3 2

array flip 交換陣列中的鍵和值 說明 array flip array array arrayarray flip 返回乙個反轉後的 array,例如array中的鍵名變成了值,而array中的值成了鍵名。注意array中的值需要能夠作為合法的鍵名 例如需要是 int 或者 string ...