I O 多路轉接 select 的使用

2021-08-25 19:07:23 字數 1109 閱讀 3426

select使用的一般步驟:

1 清空fd_set

2 把描述符加入fd_set

3 呼叫select,更新所有描述符的狀態

4 依次檢測每個描述符,若可讀或者可寫,則從描述符中讀/寫資料

5 每次select之前都要重新對fd_set清零,並把關心的描述符重新加進去

錯誤的做法:

fd_set	set;

ct timeval tv = ;

fd[n] = ; /* 檔案描述符列表 */

maxfd = max; /* 求最大的描述符 */

fd_zreo(&set);

for (i = 0; i < n; i++)

//select返回後在依次檢查每個描述符

if (select(maxfd+1, &set, null, null, &tv) > 0) }}

fd_clr(1, &set);

fd_clr(2, &set);

fd_clr(3, &set);

//select返回後在依次檢查每個描述符

if (select(maxfd+1, &set, null, null, &tv) > 0)

}}

正確的做法:

fd_set	set;

struct timeval tv = ;

fd[n] = ; /* 檔案描述符列表 */

maxfd = max; /* 求最大的描述符 */

fd_zreo(&set);

for (i = 0; i < n; i++)

//select返回後在依次檢查每個描述符

if (select(maxfd+1, &set, null, null, &tv) > 0) }}

fd[n] = ; /* 檔案描述符列表 */

maxfd = max; /* 求最大的描述符 */

fd_zreo(&set);

for (i = 0; i < n; i++)

//select返回後在依次檢查每個描述符

if (select(maxfd+1, &set, null, null, &tv) > 0)

}}

I O多路轉接(select

一.基本概念 二.函式原型 includeint select int nfds,fd set readfds,fd set writefds,fd set exceptions,struct timeval timeout fd set 介面 void fd clr int fd,fd set s...

select多路IO轉接

void fd zero fd set set 清空乙個檔案描述符集合。fd set rset fd zero rset void fd set int fd,fd set set 將待監聽的檔案描述符,新增到監聽集合中 fd set 3,rset fd set 5,rset fd set 6,rs...

IO 多路轉接 select

select多路io轉接 原理 借助核心,select來監聽,客戶端連線 資料通訊事件 void fd clr int fd,fd set set 將乙個檔案描述符從監聽集合中 移除 fd clr 4,rset int fd isset int fd,fd set set 判斷乙個檔案描述符是否在監...