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