UNP學習第六章select

2022-07-30 23:57:18 字數 2134 閱讀 5217

乙個輸入操作一般有兩個不同的階段:

1.等待資料準備好

2.從核心到程序拷貝資料

五個i/o模型基本區別:

此系統呼叫直到資料報到達切拷貝到應用緩衝區或是出錯才返回。

前三次呼叫recvfrom任無資料返回,因此核心立即返回乙個ewouldblock錯誤。

第四次呼叫recvfrom時,資料已準備好,被拷貝到應用緩衝區,recvfrom返回成功指示。

一直呼叫recvfrom稱之為輪詢,這會對cpu時間極大浪費。

呼叫select或poll,在這兩個系統呼叫中的某乙個上阻塞,而不是阻塞於真正的i/o系統呼叫。

我們阻塞select呼叫,等待資料報套介面可讀。當select返回套介面可讀條件時,我們呼叫recvfrom將資料報拷貝到應用緩衝區中。

這一種和第一種比較沒有什麼優越性,而且呼叫了兩次系統呼叫。但是select可以等待多個描述字。

我們也可以用訊號,讓核心描述字準備好時用訊號sigio通知我們。

先要允許套介面進行訊號驅動i/o,並通過系統呼叫sigaction安裝乙個訊號處理程式。

此系統呼叫立即返回,程序繼續工作,它是非阻塞的。資料準備好被讀時,就為該程序生成乙個sigio訊號。

我們可以在訊號處理程式中呼叫recvfrom來讀取資料報,並通知主迴圈來處理。(也可以通知主迴圈讀取)

訊號的好處是,不阻塞,主迴圈可以繼續執行。

和上乙個訊號驅動i/o由核心通知我們何時可以啟動乙個i/o操作,非同步i/o是由核心通知我們i/o操作何時完成。

#include select.h>#include 

intselect(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset

const

struct timeval *timeout);

返回:準備好描述字的正數目0超時,-1出錯

maxfdp1:整數值,集合中所有檔案描述符範圍,所有檔案描述符中的最大值+1

readset:指向一組等待可讀性檢查的套介面

writeset:指向一組等待可寫性檢查的套介面

exceptset:指向一組等待錯誤檢查的套介面

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

timeout有三種可能:

1.永遠等待下去:僅在有乙個描述字準備好i/o時才返回,為此,我們將引數timeout設定為空指標

3.根本不等待:檢查描述字後立即返回,這稱為輪詢。timeout指向0

對於上面的fd_set資料型別,唯一可以進行處理的是:分配乙個這種型別的變數,將這種型別的乙個變數賦值給同類的另乙個變數,或使用下面函式。

#include select.h>

int fd_isset(int fd, fd_set *fdset);  /*在呼叫select()函式後,用fd_isset來檢測fd是否在set集合中,當檢測到fd在set中則返回真,否則,返回假(0)*/

返回:若fd在描述符集中,返回非0值,否則返回0

void fd_clr(int fd, fd_set *fdset);  /*將fd從set集合中清除*/

void fd_set(int fd, fd_set *fdset);  /*將fd加入set集合*/

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

相關的還有fd_set

typedef struct

fd_set;

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 學習筆記

1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...

第六章學習記錄

教材學習內容總結 1 使用關鍵字inte ce來定義乙個介面,介面的定義分為介面宣告和介面體 inte ce printable 2 介面提中包含常量的宣告 沒有變數 和抽象方法 介面體只有抽象的方法,沒有普通的方法,而且介面體中所有的常量的訪問許可權一定都是public,而且是static常量,所...