2018-2019-1 20165312 實驗三 實時系統
阿新 • • 發佈:2018-11-18
linux命令 net 代碼 close 單詞數 技術 ref 進行 顯示
2018-2019-1 20165312 實驗三 實時系統
任務一
- 學習使用Linux命令wc(1)
- 基於Linux Socket程序設計實現wc(1)服務器(端口號是你學號的後6位)和客戶端
- 客戶端傳一個文本文件給服務器
- 服務器返加文本文件中的單詞數
問題1:什麽是wc(1)命令?
首先使用man wc
了解功能
可得知,wc
命令計算每個文件的行數、字數、字節數。
可得知,wc各個參數的作用如下:
wc -c
統計文件字節數。wc -m
統計字符數wc -l
統計行數wc -w
統計字數wc -L
打印最長行的長度wc -help
顯示幫助信息wc -version
顯示版本信息
問題2:什麽是socket編程?客戶端和服務器之間如何進行數據傳輸?
socket編程的基本函數有socket()
、bind()
、listen()
、accept()
、send()
、sendto()
、recv()
以及recvfrom()
等,其中根據客戶端還是服務端,或者根據使用TCP協議還是UDP協議,這些函數的調用流程都有所區別。
本題目我使用TCP協議,即采用面向無連接的SOCKET
運行截圖
任務二
- 使用多線程實現wc服務器並使用同步互斥機制保證計數正確
- 上方提交代碼
- 下方提交測試
- 對比單線程版本的性能,並分析原因
運行截圖
遇到的問題及解決方法
- 在虛擬機中查詢ip地址時出現未安裝
sudo apt install net-tools
安裝過之後,查詢ip為127.0.0.1
- 運行server.c時
gcc server.c -o server -lpthread
出現之下錯誤
使用man close
查找close功能,發現缺少函數所對應的頭文件,添加之後即正常運行。
- 運行client.c時
gcc client.c -o client -lpthread
出現以下錯誤
缺少close函數所對應的頭文件同上一個錯誤,使用man gets
查找gets功能
gets函數所對應的頭文件已存在,說明不是這個問題。就尋求另外一個解決方法。接著man fgets
查詢fgets功能
用fgets函數替換gets函數即可
參考:warning: the ‘gets‘ function is dangerous and should not be used.的解決辦法
- 運行client.c時
gcc client.c -o client -lpthread
出現以下錯誤
man inet_aton
查詢此函數的功能
添加缺少的頭文件即可以運行
2018-2019-1 20165312 實驗三 實時系統