阻塞式 非阻塞式IO

2021-09-11 02:46:05 字數 902 閱讀 2357

【知識點】

非阻塞式io 的兩種設定方法

(1) 函式fcntl( ),設定 o_nonblock 選項

int flag=fcntl(sockfd,f_getfl,0);檢查檔案標誌位

fcntl(sockfd,f_setfl,flag|o_nonblock);設定檔案標誌位

(2) 函式ioctl( ),設定fionbio 選項

int nio=1;設定非阻塞io

ioctl(sockfd,fionbio,&nio);

完成y=a+b

a 由客戶端從標準輸入獲得,消耗時間有使用者自行掌握。

b 由服務端隨機生成,消耗時間t 由服務端的隨機確定(不超過1 分鐘)。

要求:(1) 客戶端使用非阻塞式io 進行接收資料。

(2) 客戶端向伺服器發出請求資料b

(3) 客戶端從標準輸入獲取乙個整型

(4) 客戶端從服務端獲得隨機數。

(5) 客戶端計算並顯示計算結果。

(6) 服務端接到請求後,產生隨機消耗時間t。

(7) 服務端sleep(t)後返回乙個隨機數給客戶端。

(8) 可參考以下流程圖進行實現。

主要**:

客戶端:(nonbcli.c)

#include "my.h" //除錯**中的標頭檔案,包含許多函式對出錯的處理

#define max(a,b) a>b?a:b

int a,b;

int flag;

void str_cli(file *fp, int sockfd)

{ write(sockfd,"fornumber",10);

flag=fcntl(sock

Java IO 阻塞 非阻塞式IO 同步 非同步IO

同步 synchronous io和非同步 asynchronous io,阻塞 blocking io和非阻塞 non blocking io分別是什麼,到底有什麼區別?這個問題其實不同的人給出的答案都可能不同,比如wiki,就認為asynchronous io和non blocking io是乙...

阻塞式Socket VS 非阻塞式Socket

主要有三種型別的socket,永久阻塞模式 阻塞加超時模式和非阻塞式。socket模式可以通過apr socket opt set 和apr socket timeout set 這兩個api控制。在windows和unix系統上預設的socket是永久阻塞模式 apr so nonblock ti...

什麼是阻塞式和非阻塞io流

阻塞io socket 的阻塞模式意味著必須要做完io 操作 包括錯誤 才會返回。非阻塞io 非阻塞模式下無論操作是否完成都會立刻返回,需要通過其他方式來判斷具體操作是否成功。兩者區別 所謂阻塞方式的意思是指,當試圖對該檔案描述符進行讀寫時,如果當時沒有東西可讀,或者暫時不可寫,程式就進入等待 狀態...