C語言 I O復用

2021-09-29 12:42:28 字數 1006 閱讀 7378

一、i/o模型分類

其中阻塞i/o模型、非阻塞i/o模型、 i/o復用(select 和 poll)模型、訊號驅動i/o模型都是同步i/o操作、只有非同步i/o模型才是非同步操作。

同步i/o操作指:導致請求程序阻塞,直到i/o操作完成;

非同步i/o操作指:不導致請求程序阻塞。

二、相關函式

函式描述

intselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const

struct timeval *timeout);

位於:;

功能:該函式允許程序指示核心等待多個事件中的任何乙個發生,並只在乙個或多個事件發生或經歷一段指定的時間後才喚醒它。也就是說,我們呼叫select告知核心對那些描述符(就讀、寫或異常條件)感興趣已經等待多長時間。我們感興趣的描述符不侷限於套接字,任何描述符都可以使用select;

返回:若有就緒描述符則為其數目,若超時則為0,若出錯則為-1。

intpselect(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const

struct timespec *timeout, const sigset_t *sigmask);

位於:;

功能:類似於select,但比select更靈活;

返回:若有就緒描述符則為其數目,若超時則為0,若出錯則為-1。

intpoll(struct

pollfd *fdarray, unsigned long nfds, int timeout);

位於:;

功能:類似於select,但是在處理流裝置時提供了額外資訊;

返回:若有就緒描述符則為其數目,若超時則為0,若出錯則為-1。

I O復用和I O模型

由 unix網路程式設計卷1 總結而來。同時監視多個i o條件,在其中任意乙個就緒時通知程序,這樣的能力稱為i o復用。由select和poll函式支援,較新的還有posix中的pselect函式。linux中還有epoll i o復用應用場合 1 客戶同時處理多個描述符時,必須使用i o復用。2 ...

IO模型 IO多路復用

用socket 一定會用到accept recv recvfrom這些方法 正常情況下 accept recv recvfrom都是阻塞的 如果setblocking false 整個程式就變成乙個非阻塞的程式了非阻塞的特點 沒有併發程式設計的機制 是乙個同步的程式 程式不會在某乙個連線的recv或...

I O多路復用

一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...