Select 使用說明及教程

2021-06-15 09:01:02 字數 2465 閱讀 7667

確定乙個或多個套介面的狀態,如:需要則等待。

#include

int pascal far select( int nfds, fd_set far* readfds, fd_set far* writefds, fd_set far* exceptfds, const struct timeval far* timeout);

nfds:是乙個整數值,是指集合中所有檔案描述符的範圍,即所有檔案描述符的最大值加1,不能錯!在windows中這個引數的值無所謂,可以設定不正確。

readfds:(可選)指標,指向一組等待可讀性檢查的套介面。

writefds:(可選)指標,指向一組等待可寫性檢查的套介面。

exceptfds:(可選)指標,指向一組等待錯誤檢查的套介面。

timeout:select()最多等待時間,對阻塞操作則為null。

///

fds_set介紹(baidu百科)

select()機制中提供一fd_set的資料結構,實際上是一long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼(不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼)建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select()時,由核心根據io狀態修改fd_set的內容,由此來通知執行了select()的程序哪一socket或檔案發生了可讀或可寫事件。

結構體原型:

typedef struct fd_set fd_set;

fd_set set;

fd_zero(&set); /*將set清零使集合中不含任何fd*/

fd_set(fd, &set); /*將fd加入set集合*/

fd_clr(fd, &set); /*將fd從set集合中清除*/

fd_isset(fd, &set); /*在呼叫select()函式後,用fd_isset來檢測fd在fdset集合中的狀態是否變化返回整型,當檢測到fd狀態發生變化時返回真,否則,返回假(0)*/

以上式子中的fd為socket控制代碼。

///

#include #include 

#pragma comment(lib, 「ws2_32.lib」)

intmain()

//建立偵聽socket

socket slisten;

slisten = socket(af_inet, sock_stream, 0

);

if (slisten ==invalid_socket)

//填充伺服器位址結構

sockaddr_in servaddr;

servaddr.sin_family =af_inet;

servaddr.sin_addr.s_addr =inaddr_any;

servaddr.sin_port = htons(8000

);

//繫結伺服器套接字

ret = bind(slisten, (sockaddr*)&servaddr, sizeof

(servaddr));

if (ret ==socket_error)

//開始偵聽

ret = listen(slisten, 5

);

if (ret ==socket_error)

printf(」伺服器啟動成功,在埠%d監聽…\n」, ntohs(servaddr.sin_port));

//使用select模型

//建立套接字集合

fd_set allsockset; //

總的套接字集合

fd_set readset; //

可讀套接字集合

fd_set writeset; //

可寫套接字集合

fd_zero(&allsockset); //

清空套接字集合

fd_set(slisten, &allsockset); //

將slisten套接字加入套接字集合中

char bufrecv[100]; //

接收緩衝區

//進入伺服器主迴圈

while(1

)

//存在套接字的i/o已經準備好

if(ret > 0

)

else

//接收客戶端資訊

if (ret == 0

)

bufrecv[ret] = 『\0

′; printf(」收到的訊息:%s\n」, bufrecv);

} //end else}//

end if}//

end for

} //

end if

}//end while

return0;

}

使用說明 無線投屏器使用說明教程

無線投屏器使用說明教程 硬體準備 傳送端windows電腦 macos 安卓手機 平板 蘋果手機 平板 媒介 awind奇機無線投屏器 接收端 顯示大螢幕 投影機 電視機 一體機等支出hdmi或vga訊號輸入即可。前提條件 投屏的前提條件是傳送端和媒介處於同乙個區域網。使用路由器組建區域網或者裝置直...

Devcpp Dev C 使用說明及技巧

本文僅適合初學程式設計的人學習,菜鳥以上級別請飄過.dev c 是乙個windows下的c和c 程式的整合開發環境。它使用mingw32 gcc編譯器,遵循c c 標準。開發環境包括多頁面視窗 工程編輯器以及偵錯程式等,在工程編輯器中集合了編輯器 編譯器 連線程式和執行程式,提供高亮度語法顯示的,以...

rz sz安裝及使用說明

1.軟體安裝 1 編譯安裝 root 賬號登陸後,依次執行以下命令 cd tmp wget tar zxvf lrzsz 0.12.20.tar.gz cd lrzsz 0.12.20 configure make make install 上面安裝過程預設把lsz和lrz安裝到了 usr loca...