2018-2019-1 20165218 實驗三 實時系統
阿新 • • 發佈:2018-11-18
lin 進程 字節 打印 多線程 最長 字數 The -h
2018-2019-1 20165218 實驗三 實時系統
實驗任務
- 學習使用Linux命令wc
- 基於Linux Socket程序設計實現wc(1)服務器(端口號是你學號的後6位)和客戶端,客戶端傳一個文本文件給服務器,服務器返加文本文件中的單詞數
- 使用多線程實現wc服務器並使用同步互斥機制保證計數正確
實驗內容
一、學習wc
Linux系統中的wc(Word Count)命令功能是統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出
- 命令格式:
wc (-參數) 文件
參數一覽
參數 | 功能 |
---|---|
-c |
統計字節數 |
-l |
r統計行數 |
-m |
統計字符數(不能與-c連用) |
-w |
統計字數 |
-L |
打印最長行的長度 |
--help |
顯示幫助信息 |
--version |
現實版本信息 |
二、服務器實現wc命令
三、多線程實現wc服務器
信號量
- 信號量本質上是一個非負數的整數計數器,它也被用來控制對公共資源的訪問。當公共資源增加的時候,調用信號量增加函數
sem_post()
對其進行增加,當公共資源減少的時候,調用函數sem_wait()來減少信號量。 - 定義在
/usr/include/semaphore.h
,調用之前需要引入頭文件#include <semaphore.h>
- 初始化:
int sem_init(sem_t *sem, int pshared, unsigned int value);
sem
:指向信號量結構的指針pshared
:pshared!=0
,信號量在進程間共享;pshared==0
,只能為當前進程的所有線程們共享value
:信號量的初始值int sem_wait(sem_t *sem);
信號量減1int sem_post(sem_t *sem);
信號量加1int sem_destroy(sem_t *sem);
銷毀信號量- 以上函數成功返回0,失敗-1
分析
- 單線程只允許一個客戶端連接,較為簡單;多線程允許多個,更復雜,效率更高
- 單線程保證了安全性,多線程保證高效性
代碼托管
參考資料
linux中wc命令用法
2018-2019-1 20165218 實驗三 實時系統