linux下select函式的使用
一.select 函式詳細介紹
負值:select錯誤
正值:某些檔案可讀寫或出錯
0:等待超時,沒有可讀寫或錯誤的檔案
在有了select後可以寫出像樣的網路程式來!
舉個簡單的例子,就是從網路上接受資料寫入乙個檔案中。
二.另乙個例子:
#include
#include
#include
定義函式 int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
函式說明 select()用來等待檔案描述詞狀態的改變。引數n代表最大的檔案描述詞加1,引數readfds、writefds 和exceptfds 稱為描述片語,是用來回傳該描述詞的讀,寫或例外的狀況。底下的巨集提供了處理這三種描述片語的方式:
返回值 如果引數timeout設為null則表示select()沒有timeout。
錯誤** 執行成功則返回檔案描述詞狀態已改變的個數,如果返回0代表在描述詞狀態改變前已超過timeout時間,當有錯誤發生時則返回-1,錯誤原因存於errno,此時引數readfds,writefds,exceptfds和timeout的值變成不可**。
ebadf 檔案描述詞為無效的或該檔案已關閉
eintr 此呼叫被訊號所中斷
einval 引數n 為負值。
enomem 核心記憶體不足
範例 常見的程式片段:fs_set readset;
fd_zero(&readset);
fd_set(fd,&readset);
select(fd+1,&readset,null,null,null);
if(fd_isset(fd,readset)
下面是linux環境下select的乙個簡單用法
用來迴圈讀取鍵盤輸入
將例子程式作一修改,加上了time out,並且考慮了select得所有的情況:
分類:
linux c開發
select函式介紹
阻塞方式block,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回。使用select就可以完成非阻塞non block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執 況,如果事件...
select函式詳細用法解析
1 表頭檔案 include include include 2 函式原型 int select int n,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout 3 函式說明 select 用來等待檔案描述詞狀...
select函式詳細用法解析
1 表頭檔案 include include include 2 函式原型 int select int n,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout 3 函式說明 select 用來等待檔案描述詞狀...