關於Linux檔案中的阻塞和非阻塞

2021-09-25 05:43:16 字數 645 閱讀 7356

舉個栗子,下面利用非阻塞模式開啟檔案,然後不斷迴圈讀取緩衝區中的資料,如果沒有資料則迴圈等待;

#include#include#include#include#include#include#define msg_try "try again\n"

//非阻塞讀終端

int main()

tryagain:

n = read(fd,buf,20);

if(n < 0)

perror("read /dev/tty");

exit(1);

}write(stdout_fileno,buf,n);

close(fd);

return 0;

}

執行截圖:

/dev/tty 指向的是當前開啟的終端裝置,指向linux的bash終端,當我們執行unblock_read這個程式後,剛開始緩衝中沒有資料,所以read不成功,因此我們把提示資訊write到終端上顯示,每過兩秒再回去read,直到檢測到終端中有資料,把資料從終端fd的緩衝區拷貝到buf緩衝區中,然後再把buf緩衝區中的資料輸出到終端中顯示。

Linux阻塞和非阻塞

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

Linux裝置驅動中的阻塞和非阻塞I O

阻塞操作 是指在執行裝置操作時,若不能獲得資源,則掛起程序直到滿足操作條件後再進行操作。被掛起的程序進入休眠,被從排程器移走,直到條件滿足。非阻塞操作 在不能進行裝置操作時,並不掛起,它或者放棄,或者不停地查詢,直到可以進行操作。非阻塞應用程式通常使用select系統呼叫查詢是否可以對裝置進行無阻塞...

Linux 阻塞與非阻塞 讀取檔案

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