78 高階IO之非阻塞IO

2021-08-18 04:25:28 字數 327 閱讀 5607

高階io是相對於檔案io說的

檔案io,就是讀寫檔案,一切皆是檔案

高階io要解決讀寫以外的情況

阻塞式:函式呼叫會被卡住(雖然會釋放cpu的使用權,但是**不會往下走),核心會在此處掛起,

好多預設的程式都是阻塞式的,

常見的阻塞式的函式,sleep,wait,pause等,

阻塞式在多路io的時候會有問題,會影響實時性。

非阻塞:沒有條件先過去幹別的,沒有條件也過去

兩種方法開啟open時候用o_nonblock (適用於開啟的時候就知道要非阻塞操作) 

fcntl(開啟的時候不知道用阻塞式操作)設定屬性

高階IO 非阻塞IO

通常我們在設定介面是阻塞還是非阻塞的時候,有兩種方案 1 將檔案描述符設定為非阻塞式檔案描述符 2 通過傳遞特殊選項,讓介面本身以非阻塞方式呼叫。乙個檔案描述符,預設都是阻塞io。fcntl的函式原型如下 fcntl可以改變已經開啟的檔案性質。針對cmd的值,fcntl能夠接受第三個引數arg 可變...

高階IO 非阻塞

一 設定檔案描述符標誌 設定檔案描述符標誌 void set fl int fd,int flags 二 清除檔案描述符標誌 清除檔案描述符標誌 void clr fl int fd,int flags 三 主函式 int main void clr fl stdout fileno,o nonbl...

阻塞I O,非阻塞I O

拿 socket舉例。當read資料時,如果這時沒有資料可讀,阻塞i o會一直等待有資料讀,資料從kernel copy 到socket的buffer後返回 非阻塞i o會立即返回,但如果有資料可讀,非阻塞i o也是等資料從kernel copy 到socket的buffer後返回。以上是阻塞與非阻...