select()的介紹 全是拷貝的如下文章:
select()函式的用例**摘錄如下文章:
1. select函式簡介
select一般用在socket網路程式設計中,在網路程式設計的過程中,經常會遇到許多阻塞的函式,網路程式設計時使用的recv, recvfrom、connect函式都是阻塞的函式,當函式不能成功執行的時候,程式就會一直阻塞在這裡,無法執行下面的**。這是就需要用到非阻塞的程式設計方式,使用 selcet函式就可以實現非阻塞程式設計。
selcet函式是乙個輪循函式,即當迴圈詢問檔案節點,可設定超時時間,超時時間到了就跳過**繼續往下執行。
下面是select的函式原型:
/*according to posix.1-2001
*/#include
select.h>
intselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
引數介紹:
第乙個引數:int nfds--->是乙個整數值,是指集合中所有檔案描述符的範圍,即所有檔案描述符的最大值加1
第二個引數:fd_set *readfds---->用來檢查一組可讀性的檔案描述符。
第三個引數:fd_set *writefds---->用來檢查一組可寫性的檔案描述符。
第四個引數:fd_set *exceptfds---->用來檢查檔案檔案描述符是否異常
第五個引數:sreuct timeval *timeout--->是乙個時間結構體,用來設定超時時間。該引數是null,表示是阻塞操作
select函式的返回值 :
負值:select錯誤
正值:表示某些檔案可讀或可寫
0:等待超時,沒有可讀寫或錯誤的檔案
下面是一些跟select() 一起使用的函式及結構的作用
void fd_zero(fd_set *set); //清空乙個檔案描述符的集合
void fd_set(int fd, fd_set *set); //
將乙個檔案描述符新增到乙個指定的檔案描述符集合中
void fd_clr(int fd, fd_set *set); //
將乙個指定的檔案描述符從集合中清除;
int fd_isset(int fd, fd_set *set);//
檢查集合中指定的檔案描述符是否可以讀寫
struct timeval 結構體可以精確到秒跟毫秒。用於設定阻塞時間;如果其成員設定為0,表示不阻塞,立即返回。
structtimeval ;
下面是使用select()函式的乙個例子:
//test select()
#include#include
#include
#include
#include
select.h>#include
#include
#include
intmain()
else
if(0 ==ret)
if(fd_isset(fd, &fd_set))
}close(fd);
return0;
}
學習筆記 select函式
select原型 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout select函式可以使用各種套接字巨集來控制io。fd clr int fd,fd set set ...
linux c學習筆記 select函式詳解
select系統呼叫是用來讓我們的程式監視多個檔案控制代碼 file descriptor 的狀態變化的。程式會停在select這裡等待,直到被監視的檔案控制代碼有某乙個或多個發生了狀態改變。何為檔案控制代碼?檔案控制代碼在linux裡很多,如果你man某個函式,在函式返回值部分說到成功後有乙個檔案...
linux socket的select函式例子
使用select函式可以以非阻塞的方式和多個socket通訊。程式只是演示select函式的使用,功能非常簡單,即使某個連線關閉以後也不會修改當前連線數,連線數達到最大值後會終止程式。1.程式使用了乙個陣列fd a,通訊開始後把需要通訊的多個socket描述符都放入此陣列。2.首先生成乙個叫sock...