1. 程式人生 > >2018-2019-1 20165218 實驗三 實時系統

2018-2019-1 20165218 實驗三 實時系統

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);
    成功返回值為0,否則-1
  • sem:指向信號量結構的指針
  • psharedpshared!=0,信號量在進程間共享;pshared==0,只能為當前進程的所有線程們共享
  • value:信號量的初始值
    • int sem_wait(sem_t *sem);信號量減1
    • int sem_post(sem_t *sem);信號量加1
    • int sem_destroy(sem_t *sem);銷毀信號量
    • 以上函數成功返回0,失敗-1
分析
  • 單線程只允許一個客戶端連接,較為簡單;多線程允許多個,更復雜,效率更高
  • 單線程保證了安全性,多線程保證高效性

代碼托管


參考資料

linux中wc命令用法

2018-2019-1 20165218 實驗三 實時系統