檔案非阻塞狀態開啟後改變為阻塞狀態

2021-06-06 08:59:53 字數 601 閱讀 3249

所以如果開啟檔案時是用非阻塞狀態開啟的:

open("/dev/tty",o_rdwr|o_noctty|o_ndelay);

則可以用fcntl改變檔案狀態標誌:fcntl(fd, f_setfl, 0);--改變檔案為阻塞狀態。

或者麻煩點,但易於理解:

1、獲取檔案的flags,即open函式的第二個引數:

flags = fcntl(fd,f_getfl,0);

2、設定檔案的flags:

fcntl(fd,f_setfl,flags);

3、增加檔案的某個flags,比如檔案是阻塞的,想設定成非阻塞:

flags = fcntl(fd,f_getfl,0);

flags |= o_nonblock;

fcntl(fd,f_setfl,flags);

4、取消檔案的某個flags,比如檔案是非阻塞的,想設定成為阻塞:

flags = fcntl(fd,f_getfl,0);

flags &= ~o_nonblock;

fcntl(fd,f_setfl,flags);

對普通檔案的讀寫不存在阻塞問題,對和終端、網路連線等對應的檔案描述符才會阻塞

執行緒阻塞狀態例項分析

有三種方法可以暫停threads執行 1.sleep方法 sleep時別的執行緒也不可以訪問鎖定物件。2.yield方法 讓出cpu的使用權,從執行態直接進入就緒狀態。讓cpu重新挑選哪乙個執行緒進入執行狀態。3.join方法 當某乙個執行緒等待另乙個執行緒執行結束後,才繼續執行時,使用join方法...

16 3 2 執行狀態和阻塞狀態

如果處於就緒狀態的執行緒獲得了cpu,開始執行run 方法的執行緒執行體,則該執行緒處於執行狀態,如果計算機只有乙個cpu,那麼在任何時刻只有乙個執行緒處於執行狀態。當然,在乙個多處理器的機器上,將會有多個執行緒並行執行 不過當執行緒數大於處理器數時,依然會存在多個執行緒在同乙個cpu上輪換的現象。...

如何結束阻塞狀態的執行緒

vc mfc 2009 02 07 16 30 26 閱讀109 字型大小 大 中小訂閱 如果乙個執行緒由於等待某些事件的發生而被阻塞,又該如何實現該執行緒的中斷呢?比如當乙個執行緒由於需要等候鍵盤輸入而被阻塞,處於不可執行狀態時,即使主程式中將該執行緒的共享變數設定為true,但該執行緒此時根本無...