Linux阻塞與非阻塞

2021-09-22 12:44:37 字數 1307 閱讀 6218

1.阻塞(block)概念:指程序或執行緒在執行裝置操作或管道,或則網路時,不能獲取到資源就被掛起,

直到滿足可操作的條件後在進行操作,被掛起的程序進入休眠狀態,從執行佇列移走,直到

等待的條件滿足才繼續執行。也就是執行到某些函式時必須等待某個事件發生函式才返回。

2.非阻塞(non_block):程序就算沒有獲取到資源或沒有等到事件發生時不掛起,通常會直接放棄或不斷查詢,

直到可以進行的位置。也就是函式的執行不必等待事件發生,一旦執行肯定返回,用返回值來反應函式執**況。

3.例如:read讀取輸入輸出裝置/dev/tty

4.read裝置檔案時發生阻塞

#include

#include

#include

#include

#include

#include

intmain

(int argc,

char

* ar**)

int ret =0;

char buf[

1024]=

;while(1

)else

if(ret ==0)

printf

("buf is null\n");

else

if(ret >0)

printf

("buf is %s\n"

,buf)

;printf

("test\n");

sleep(1

);}close

(fd)

;return0;

}

5.直接用o_nonblock設定非阻塞

int

main

(int argc,

char

* ar**)

int ret =0;

char buf[

1024]=

;while(1

)else

sleep(1

);}close

(fd)

;return0;

}

6.用fcntl()函式與o_nonblock設定非阻塞

int

main

(int argc,

char

* ar**)

;while(1

)else

sleep(1

);}close

(fd)

;return0;

}

Linux串列埠阻塞與非阻塞

linux串列埠程式設計的阻塞與否可以在open函式中設定,例如 開啟時使用 fd open usar1,o rdwr o noctty 阻塞式讀寫 fd open dev ttyat2 o rdwr o noctty o ndelay 非阻塞讀寫除了用open函式之外還可以在open函式之後用fc...

Linux 阻塞與非阻塞 讀取檔案

讀常規檔案是不會阻塞的,不管讀多少位元組,read一定會在有限的時間內返回。從終端裝置或網路讀則不一定,如果從終端輸入的資料沒有換行符,呼叫read讀終端裝置就會阻塞,如果網路上沒有接收到資料報,呼叫read從網路讀就會阻塞,至於會阻塞多長時間也是不確定的,如果一直沒有資料到達就一直阻塞在那裡。同樣...

Linux阻塞和非阻塞

阻塞 休眠 呼叫是沒有獲得資源則掛起程序,被掛起的程序進入休眠狀態,呼叫的函式只有在得到結果之後才返回,程序繼續。非阻塞 休眠 是不能進行裝置操作時不掛起,或返回,或反覆查詢,直到可以進行操作為止,被呼叫的函式不會阻塞當前程序,而會立刻返回。因為阻塞的程序會進入休眠狀態,因此,必須確保有乙個地方能夠...