深入理解計算機系統 echo客戶端伺服器

2021-09-08 13:00:58 字數 1230 閱讀 9372

echo客戶端,在和伺服器連線以後,客戶端應該進入乙個迴圈,反覆從標準輸入讀取文字行,傳送文字行給伺服器,從伺服器讀取回送的行,並輸出結果到標準輸出。當fgets在標準輸入上遇到eof時,或者因為使用者在鍵盤上輸入ctrl+d,或者在遇到乙個重定向的輸入檔案中用盡了所有的文字行時,迴圈截止。

int main(int argc, char **ar**)

host = ar**[1];

//將字串轉為int,書上沒有轉換是錯的

port = atoi(ar**[2]);

//開啟

clientfd = open_clientfd(host, port);

//初始化rio讀寫

rio_readinitb(&rio, clientfd);

while (fgets(buf, maxline, stdin) != null)

close(clientfd); //line:netp:echoclient:close

exit(0);

} 伺服器主程式,開啟監聽描述符,進入迴圈,等待乙個來自客戶端的連線請求,輸出已連線的客戶端網域名稱和ip位址,並呼叫echo函式為這個客戶端服務,在echo程式返回之後,主程式關閉已連線的描述符,一旦客戶端和伺服器都關閉了他們各自的描述符,連線終止。

//伺服器為客戶端服務函式

void echo(int connfd);

int main(int argc, char **ar**)

//字串轉換為int

port = atoi(ar**[1]);

//開啟乙個監聽描述符

listenfd = open_listenfd(port);

while (1)

exit(0);

} //服務函式

void echo(int connfd)

} 客戶端傳送接收到伺服器回顯。

伺服器顯示接收到的資料大小。

這裡是簡單的乙個echo伺服器一次只能乙個客戶端,這種型別的伺服器一次乙個的在客戶端間迭代,稱為迭代伺服器,如果需要建立更複雜的併發的伺服器,他能夠同時處理多個客戶端。

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...