Select 函式詳細介紹

2021-06-08 13:36:32 字數 1109 閱讀 8348

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 用來等待檔案描述詞狀...