本文檔 下載地址 http://pan.baidu.com/s/1dFqeJvzlinux
尹德位 2016 cnyinlinux@163.com算法
第一部分 知識體系概覽編程
第二部分 系統編程兵法數組
第三部分 實戰案例綜述緩存
第一章 C語言應用安全
第二章 數據結構bash
第三章 Shell編程服務器
第四章 Makefile編程網絡
第五章 Unix/Linux系統編程數據結構
1.程序概述
1.1 馮諾依曼結構與可執行程序的對應關係
1.2 程序在系統上運行的實現過程
1.3 程序執行的起點,以及可被調用的main函數
1.4 進程調度到底作了什麼
1.5 程序也會寫遺書
2.C語言關鍵字
2.1 關鍵字的意義
2.2 聲明與定義的不一樣之處
2.3 關鍵字與內存的關係
2.4 typedef與define的清白
2.5 讓人傷腦筋的const
2.6 操做系統的尋址位數的意義
2.7 尋址位數設下的陷阱
2.8 再也不害怕指針——基本指針,函數指針,數組指針
2.9 指針與數據類型的關係
注:關於指針請參考後續章節
3.常量與變量
3.1 常量與變量的關係
3.2 系統如何分配內存
3.3 可執行文件的「段」
3.4 常量,變量,全局變量,局部變量的內存屬性
3.5 表達式與變量的值傳遞
3.6 條件表達式 與 逗號表達式 的使用陷阱
3.7 變量的做用域
4.數據類型
4.1 基本數據類型
4.2 數據類型與內存的關係
4.3 內存對齊
4.4 考慮內存對齊的數據結構設計
4.5 結構體與聯合體
4.6 你老是錯誤地計算結構體的size
4.7 結構體與指針
4.8 結構體嵌套
4.9 結構體與聯合體的交叉定義
4.10 枚舉類型與命令參數設計的結合
4.11 數據類型與系統尋址位數的關係
4.12 設計誇平臺的數據結構(兼容性設計)
5.進制轉換
5.1 進制與基本變量的存儲關係
5.2 進制轉換方法
5.3 無限大數的進制轉換(如1個100億位十進制數轉成二進制)
5.4 字符串與整數的轉換
6.函數
6.1 函數的定義
6.2 函數申明的做用
6.3 函數的做用範圍
6.4 形參與實參
6.5 傳入參數的實現過程
6.6 基本類型與指針傳遞的不一樣含義
6.7 函數指針做爲傳入參數的應用
6.8 參數類型與個數的優化設計
6.9 函數的退出碼
6.10 複合類型的返回
6.11 傳入指針的複用
6.12 函數深度的考慮
6.13 執行路徑的連貫性設計
6.14 遞歸函數
6.15 變參函數設計(如 printf)
7.編譯
7.1 編譯的階段
7.2 編譯錯誤排解
7.3 編譯與鏈接
7.4 gcc的使用
7.5 gcc參數詳解
8.debug調試
8.1 錯誤信息收集
8.2 gdb的使用
8.3 斷點設置與清除
8.4 單步執行數據跟蹤
8.5 越過子函數
8.6 跳出循環
8.7 調試子線程
8.8 調試子進程
8.9 ps命令詳解
8.10 top命令詳解
8.11 pstree命令詳解
8.12 kill命令詳解
8.13 find命令詳解
9.coredump調試手段
9.1 系統dump機制實現原理
9.2 系統參數設置
9.3 捕獲core信息文件
9.4 調試core文件
9.5 core與可執行文件的關聯debug
9.6 二進制文件反彙編
10.errno機制
10.1 errno實現原理
10.2 程序錯誤碼的獲取
10.3 錯誤碼含義字典查詢
10.4 邏輯錯誤的debug
11.宏
11.1 宏的定義
11.2 宏的有效範圍
11.3 宏的展開
11.4 編譯導入宏
11.5 代碼分支無效化註釋之宏分隔
11.6 宏式函數
11.7 特殊的宏( __VA_ARGS__ , __LINE__ , ...)
12.指針
12.1 指針的含義
12.2 指針與內存的關係
12.3 指針的值傳遞
12.4 做爲返回值的指針
12.5 傳入參數的指針
12.6 函數指針
12.7 函數指針的傳遞
12.8 函數指針的參數傳入
12.9 數組指針
12.10 複合類型指針
12.11 指針的強制類型轉換
12.12 指針自身的存儲
12.13 二重指針的應用
12.14 三重指針的應用
12.15 多重指針設計原則
12.16 指針的保值特殊用法
12.17 指針的步長
12.18 指針的加減運算
12.19 指針與變量地址的關係
12.20 指針的訪問方式
13.程序日誌的設計
13.1 debug日誌設計
13.2 變參函數在日誌格式化中的應用
13.3 宏分隔的日誌函數設計
13.4 編譯選項控制的日誌輸出
13.5 日誌緩存的設計
13.6 日誌同步子程序設計
14.C語言編碼規範
14.1 程序模塊劃分原則
14.2 程序文件名命名規範
14.3 頭文件設計規則
14.4 代碼目錄設計規則
14.5 函數風格設計規則
14.6 變量申明規則
14.7 結構設計規則
14.8 代碼深度設計規則
14.9 嵌套規則
14.10 子函數規模設計規則
14.11 函數功能劃分規則
14.12 變量名劃分規則
14.13 函數名劃分規則
15.位運算
15.1 邏輯 」與」 「或」 運算
15.2 按位 」與」 「或」 運算
15.3 邏輯位移
15.4 算數位移
15.5 循環位移
15.6 組合大存儲量複合數據類型的位移運算
15.7 無限計數器實現
1.數據結構概述
1.1 程序與數據結構
1.2 數據結構設計方法
1.3 數據結構與數據類型的關係
1.4 數據的生命力
1.5 優秀的數據結構就是生產力
1.6 算法與數據結構的雙劍合璧
1.7 數據結構的擴展性考慮
1.8 系統兼容性考慮
1.9 指針與數據結構
1.10 執行效率的考慮
1.11 空間複雜度
1.12 時間複雜度
1.13 迭代與遞歸
1.14 大數據量離散信息的數據模型
1.15 數據 與 結構 的深層含義
2.線性表
2.1 線性表的含義
2.2 物理連續與邏輯連續
2.3 線性表的連續存儲與離散存儲
2.4 數組空間的靜態與動態分配
2.6 鏈表與數組的聯繫
3.鏈表
3.1 鏈表的邏輯結構
3.2 鏈表節點的設計
3.3 鏈表的遍歷
3.4 鏈表的操做(建,插,刪,改,增,斷)
3.5 單鏈表的逆序
3.6 O(1)複雜度插入/刪除節點
3.7 鏈表訪問的空間複雜度與時間複雜度權衡
3.8 雙鏈表的操做
3.9 雙鏈表的複雜度分析
3.10 鏈表與數組的訪問效率比較
3.11 單鏈表交點的計算
3.12 十字交叉鏈
4.堆棧
4.1 堆棧的屬性
4.2 堆棧與數組
4.3 堆棧的存儲
4.4 堆棧的操做
4.5 堆棧的數據結構
4.6 鏈式堆棧
4.7 鏈棧與鏈表的異同
5.隊列
5.1 隊列的屬性
5.2 隊列的存儲
5.3 隊列的操做
5.4 隊列的數據結構設計
5.5 鏈式隊列
5.6 堆棧與隊列的轉換
5.7 堆棧與隊列的應用場景分析
5.8 堆棧與隊列的應用——無限大數乘法
6.樹
6.1 樹的特性
6.2 二叉樹特徵
6.3 二叉樹的性質
6.4 二叉樹的存儲
6.5 二叉樹的遍歷算法
6.6 算術表達式的樹形表示
6.7 廣義表表示法
6.8 算數表達式的二叉樹構算法研究
6.9 樹與森林
6.10 哈夫曼編碼
6.11 哈夫曼樹的構造
6.12 哈夫曼加密與解密
6.13 B+樹
6.14 紅黑樹
7.哈希表
7.1 哈希算法的構造
7.2 哈希散列數據結構
7.3 內存空間與哈希的關係
7.4 哈希函數設計
8.排序算法
8.1 冒泡
8.2 選擇
8.3 插入
8.4 折半插入
8.5 希爾
8.6 快速
8.7 歸併
8.8 快排與遞歸
8.9 歸併與遞歸
8.10 排序效率比較
8.11 大數據量的排序算法設計
8.12 排序與查找
1.計算機體系結構
1.1 kernel與APL
1.2 應用層與內核的通道
1.3 內核解釋器設計原理
1.4 Shell工做模式
1.5 操做系統登陸意味着什麼
1.6 ksh csh bash 等主流Unix/Linux解釋器
1.7 Shell的安全性
1.8 系統命令的執行上下文
1.9 環境變量
2.Shell編程
2.1 循環控制結構 while-do-done/for-in-do-done
2.2 條件控制if
2.3 case分支
2.4 Shell變量的申明與使用
2.5 命令在Shell中的特性
2.6 Shell程序的退出碼
2.7 Shell程序的傳入參數解析
2.8 Shell的函數定義
2.9 Shell函數的參數傳遞
2.10 Shell函數的返回值
2.11 Shell函數調用
2.12 Shell與gdb
2.13 文件處理
2.14 sed編程概論
2.15 sed語法細則
2.16 sed腳本
2.17 Shell與sed腳本的嵌套
2.18 awk語法細則
2.19 awk腳本
2.20 Shell與awk的嵌套
2.21 Shell與C語言程序的嵌套
3.自動化腳本
3.1 自動化腳本的實踐意義
3.2 自動化腳本的實現原理
3.3 自動化腳本數據流
3.4 ftp自動化腳本
3.5 expect自動化編程
3.6 expect組件
3.7 expect語法
3.8 expect腳本
3.9 Shell與expect的嵌套
4.定時任務
4.1 定時任務特性
4.2 定時任務設置 at
4.3 cron定時
4.4 cron權限設置
4.5 定時任務腳本的注意事項
5.後臺任務
5.1 前臺與後臺進程的異同
5.2 啓動後臺任務
5.3 控制後臺腳本
1.自動化編譯
1.1 大型項目的架構設計
1.2 代碼目錄結構設計與功能子模塊劃分
1.3 編譯結果輸出文件的預先定義
1.4 源碼與輸出的對應關係
2.Makefile編程
2.1 Makefile的實現原理
2.2 依賴關係
2.3 規則推導
2.4 隱晦規則
2.5 變量的使用
2.6 Shell命令調用
2.7 變量引用與Shell的區別
2.8 條件編譯
2.9 自動變量
2.10 Makefile的嵌套
2.11 Makefile的出錯處理
2.12 Makefile的命令結果處理
1.Unix/Linux開發環境
1.1 系統體系結構
1.2 文件系統
1.3 系統目錄
1.4 文件管理
1.5 設備
1.6 系統配置
1.7 系統庫
1.8 系統接口
1.9 內核參數
1.10 系統限制
1.11 國際標準POSIX與ISO
1.12 系統健康監測
1.13 網卡工做模式
1.14 計算機與網絡
1.15 數據通訊過程
1.16 系統緩存
1.17 系統調用接口
1.18 應用層
2.系統I/O編程
2.1 文件屬性
2.2 系統權限
2.3 文件存儲
2.4 文件管理
2.5 系統調用與庫
2.6 文件描述符
2.7 文件建立
2.8 文件打開
2.9 文件讀取
2.10 文件寫入
2.11 文件同步
2.12 緩存刷新
2.13 文件狀態
2.14 文件關閉
2.15 狀態更改
2.16 文件關閉
2.17 文件size監視
2.18 文件截斷
2.19 文件複製
2.20 目錄操做
3.流
3.1 帶緩存的I/O
3.2 流的屬性
3.3 流的操做
3.4 打開流
3.5 讀取流
3.6 寫入流
3.7 流緩存
3.8 關閉流
3.9 流的阻塞
3.10 流的網絡操做
3.11 流與系統I/O
3.12 網絡流
3.13 流的同步
3.14 流與指針
3.15 流的截斷
4.用戶認證
4.1 系統用戶管理
4.2 認證登陸
4.3 md5加密
4.4 系統密碼管理
4.5 用戶有效性校驗
4.6 密碼認證
4.7 帶用戶認證的程序設計
5.進程環境
5.1 操做系統啓動過程
5.2 內核加載過程
5.3 系統管理服務的啓動
5.4 祖先進程
5.5 進程管理體系
5.6 進程屬性
5.7 進程相關關係
5.8 進程狀態
5.9 進程調度
5.10 進程資源
5.11 進程控制
5.12 進程回收
5.13 進程收養
5.14 調度優先級
5.15 CPU時鐘週期
5.16 牆上時間與CPU時間
5.17 進程特徵
5.18 調度算法
5.19 demon進程
5.20 服務進程設計原則
6.多進程編程
6.1 進程ID
6.2 子進程的建立
6.3 子進程與父進程
6.4 競爭調度
6.5 進程空間交集
6.6 進程資源拷貝
6.7 寫時複製機制
6.8 fork與vfork異同
6.9 進程與exec
6.10 子孫進程關係
6.11 殭屍進程
6.12 孤兒進程
6.13 進程回收與收養操做
6.14 多進程程序設計
6.15 父子進程通訊手段
6.16 獨立進程間關係
6.17 進程退出exit
6.18 服務進程設計初探
6.19 進程調試
7.信號
7.1 中斷機制
7.2 信號機制
7.3 信號捕捉
7.4 信號含義
7.5 信號發生
7.6 信號處理
7.7 信號hander的系統默認操做
7.8 信號hander自定義
7.9 信號註冊
7.10 信號屏蔽字
7.11 屏蔽字設置
7.12 屏蔽字清除
7.13 屏蔽字獲取
7.14 屏蔽字做用域
7.15 信號阻塞機制
7.16 進程控制之信號
7.17 進程間的傳呼機——信號應用
7.18 特殊信號
7.19 信號與kill命令
7.20 kill命令與kill函數
8.多線程編程
8.1 POSIX線程
8.2 線程與進程區別
8.3 線程特性
8.4 線程調度
8.5 線程空間與資源
8.6 線程子程序設計
8.7 線程傳參
8.8 線程ID
8.9 線程ID與進程ID
8.10 用戶線程與內核線程
8.11 線程建立
8.12 線程與信號
8.13 線程控制
8.14 線程終止
8.15 線程競爭
8.16 指針的特殊用法之地址傳值
8.17 線程同步
8.18 線程互斥量——線程鎖
8.19 線程加解鎖
8.20 讀寫鎖
9.高級線程控制
9.1 線程屬性
9.2 屬相結構設置
9.3 detached屬性
9.4 線程取消(cancel)
9.5 線程棧設置
9.6 線程與exit
9.7 線程與信號
9.8 線程的信號屏蔽字
9.9 線程與fork
9.10 線程鎖屬性
9.11 線程鎖類型設置
9.12 高速線程鎖
9.13 避免死鎖
9.14 自旋鎖
9.15 讀寫鎖屬性
9.16 讀寫鎖應用
9.17 讀寫鎖與普通鎖之異同
9.18 線程監測
9.19 線程調試
9.20 線程阻塞
10.進程間通訊IPC
10.1 傳統Unix的IPC技術
10.2 IPC與key
10.3 進程同步
10.4 共享內存的屬性
10.5 共享內存的產生
10.6 共享內存的應用
10.7 共享內存管理
10.8 共享內存的命令行控制
10.9 父子進程/獨立進程間的共享內存應用
10.10 共享內存的回收
10.11 管道的特性
10.12 管道的生成
10.13 管道的做用域
10.14 管道的使用
10.15 管道的回收
10.16 有名管道特性
10.17 有名管道建立
10.18 有名管道應用
10.19 有名管道與文件
10.20 有名管道撤銷
10.21 獨立進程間通訊應用
10.22 消息隊列的屬性
10.22 消息隊列的原理
10.23 消息隊列的工做模式
10.24 消息隊列的建立
10.25 消息的type
10.26 消息的發送
10.27 消息的接收
10.28 消息隊列與中斷信號
10.29 消息隊列的阻塞調用
10.30 消息隊列的限制
10.31 消息隊列的回收
10.32 信號量的屬性
10.33 信號量的原理
10.34 信號量的建立
10.35 信號量的資源計數做用
10.36 信號量與互斥鎖
10.37 進程間互斥同步
10.38 信號量的設定
10.39 P/V操做
10.40 信號量的原子性
10.41 信號量的回收
10.42 IPC綜合運用
11.網絡編程
11.1 TCP/IP網絡模型
11.2 協議的實現原理
11.3 tcpdump網卡截獲
11.4 網絡數據包分析
11.5 TCP協議的3次握手鍊接與4次分手斷開
11.6 TCP協議可靠性機制
11.7 TCP的優點與缺陷
11.8 UDP協議
11.9 UDP的高效性
11.10 UDP的優缺點
11.11 UDP與TCP的特性比較
11.12 基於算法的可靠UDP
11.13 協議在網絡程序中的地位
11.14 協議報頭特徵
11.15 用戶自定義報頭
11.16 網絡通訊的數據分割
11.17 路由
11.18 DNS
11.19 IPv4與IPv6
11.20 網絡字節序與主機字節序
11.21 IP與端口
12.SOCKET編程
12.1 通訊節點
12.2 網絡緩存
12.3 地址結構填充
12.4 IP地址有效性
12.5 網絡字節序轉換
12.6 網絡端口監視
12.7 套接字建立
12.8 套接字屬性設置
12.9 基於TCP的網絡編程
12.10 TCP套接字綁定
12.11 端口監聽
12.12 請求鏈接connect(3次握手之客戶端)
12.13 接受鏈接accept(3次握手之服務端)
12.14 鏈接句柄之網絡讀寫(accept返回)
12.15 服務端多進程模型設計
12.16 數據送信send/sendto
12.17 數據接收recv/recvfrom
12.18 網絡I/O操做
12.19 網絡通訊子進程/線程的控制與終止
12.20鏈接斷開(4次分手)
12.21服務程序退出
12.22 基於UDP的網絡通訊設計
12.23 UDP端口綁定
12.24 UDP的」鏈接」connect
12.25 UDP的數據發送 send/sendto
12.26 UDP的數據接收recv/recvfrom
12.27 用戶報頭設計
12.28 可靠的UDP算法
12.29 套接字阻塞模式
12.30 套接字緩存設置
12.31 套接字關閉
12.32 基於C/S模式的demon程序設計
13.實戰應用
13.1 C/S模式的FTP服務設計實現
13.2 C/S模式的遠程登陸/執行系統的實現
13.3 C/S模式的在線交際服務系統
13.4 可靠UDP加強協議實現
13.5 通用資源池設計(線程池,內存池,鏈接池)
C語言部分
1.『union』測試你所用電腦的內存存儲方式是大端仍是小端。 也可用指針方式
2.求任意二維數組的鞍點(行中最大,列中最小的元素)。 要求:從命令行啓動程序的時候以參數形式將二維數組的行和列輸入(數組大小動態化)。 如
./saddle_point 3 6
.=================================
428 735 304 626 824 22
201 616 223 926 945 791
378 530 358 316 601 260
.=================================
428 735 304 626 824 22
201 616 223 926 945 791
378 530 358 316 *** 260
3.求pi/2的近似值。 pi/2 = 1 + 1/3 + 1/3 x 2/5 + 1/3 x 2/5 x 3/7 ... 當某一項的值小於 10的-5次方時,認爲達到精度要求。
4.unsigned long 可存儲的最大值爲 : 18446744073709551615 , 其值的1/2爲 : 9223372036854775808 。 請設計實現知足下列條件的程序:
1, 程序運行時帶參數啓動,參數的範圍爲1~1024,若參數超範圍,則啓動失敗。 如:./cmdline 1024 2, 在9223372036854775808 ~ 18446744073709551615之間尋找 知足下列條件的數: 條件1:該數爲素數; 條件2:該素數與輸入參數求模,且模值爲奇數。 3, 將知足上述條件的素數求和,將和值輸出。
5.位運算相關題目。 用16個char實現一個巨大數的存儲。初始時爲0,即16個char都爲0。 而後,將這個大數進行自增運算,當自增到最大值爲止,即大數的值爲(2^128-1)。 運算過程當中,知足下列條件的數以十進制形式輸出(16進制輸出)。 條件:每自增2^96次就輸出。
數據結構部分
6.約瑟夫環問題
7.單項鍊表的逆序(O(n)複雜度)。
8.判斷兩單鏈表是否有交點(O(n+m))。
9.用兩個棧實現隊列的訪問控制。
10.大數乘法。 實現任意大小的兩個十進制數的乘法運算,並輸出結果。
11.算數表達式(帶括號)的二叉樹存儲實現(遞歸,雙鏈表),並實現前/中/後序三種遍歷。
12.分別實現 插入,折半插入,冒泡,選擇,希爾,快速排序,歸併排序 共7中排序方法的時間消耗統計(用gettimeofday獲取時間)。
要求:運行時輸入排序序列長度(各數字隨機生成), 另外一個可選參數控制是否輸出數列結果(1|0)。
如:./sort_method_all 1000 1 表示隨機生成1000個數並排序, 而後輸出排序先後結果。 ./sort_method_all 2000 0 表示隨機生成2000個數並排序, 無需輸出排序先後結果。
13.利用歸併排序的特色,遞歸調用此算法實現1億個數(大數據量)的排序。 並比較 歸併與快排的效率 。
實現思想:將待排序的數列分割成若干子序列,而後利用快速排序將各子序列排序, 再歸併子序列,最後獲得排序後的最終結果。
Unix系統編程階段
14.編寫一個程序:w_copy,執行make install時將其安裝到/usr/local/bin下, 執行make uninstall時卸載。 要求功能:執行時指定源文件,目標文件,以及是否保持原屬性(-p參數)。 若目標文件指定爲目錄,則保持原文件名不變,將其拷貝到指定目錄。
運行範例:w_copy /bin/ls /tmp ; w_copy /bin/ls /tmp/lll -p ; w_copy -p /bin/ls ../ ;
15.編寫一個網絡會話程序。 實現功能:在本地開啓本程序,可一與本地的其餘本程序的實例間進行實時的對話。 對話內容顯示在屏幕上。程序運行時能夠手動指定本次會話啓動時本身的暱稱。
要求:
1).項目代碼結構: Unix_Chat_Cprj 。
2).make install 時將程序安裝於系統上 。
安裝目錄 : /opt/Unix_Chat_Local/bin /opt/Unix_Chat_Local/tool /opt/Unix_Chat_Local/log
3).主服務程序的名稱爲:Unix_Chat_Cpro 。
4).程序的實例啓動與中止由 Unix_Chat_Cctl 來控制 。
Unix_Chat_Cctl start <=啓動服務 Unix_Chat_Cctl stop <=中止服務 服務器程序(Unix_Chat_Cpro)只能啓動一個實例 。 服務中止時,再也不接收客戶鏈接請求,告知客戶端退出,等待全部客戶端退出後服務中止 。
5).運行時日誌輸出到如下文件:
/opt/Unix_Chat_Local/log/Unix_Chat_log.txt 日誌文件的size爲10Mb,到達size上限時則截斷文件爲0 。
6).客戶端程序爲 Unix_Chat_Ccli ,客戶端啓動:
Unix_Chat_Ccli <暱稱> ,客戶端啓動後鏈接上Server以後被分配惟一的客戶端ID。 客戶端實例的中止用 Ctrl_C 按鍵觸發 (斷開鏈接,回收資源)。
7).服務端容許同時連接的客戶端數最大爲256個(Server端控制)。若啓動的客戶端實例大於2個,則進入羣聊模式 。
8).單次會話可發送的消息字節數上限爲256個字符 。
9).顯示示例
.----------------------------
[暱稱][ID] Say: Hello World !
.----------------------------
16.編寫FTP文件傳送程序(TCP)。
要求:
1).代碼目錄 : Wftp_Pro 。 2).make install 時安裝於 /opt/Wftp_Pro/{bin,log,tool} 。 3).服務端名稱: wftp_serv, 客戶端名稱: wftp, tool名稱: wftpctl 。 4).服務啓動/中止方式: wftpctl start/stop 。 5).客戶端運行方式: wftp ip-address (或者: wftp \n >> open ip-address) 。 6).服務器端口號 24800 。 7).同時容許鏈接數爲 128 。 8).客戶端命令行 : cd , ls , lcd , lls , put , get 。除此而外,非法輸入處置。 9).客戶端退出 : by , bye ,quit ,exit ,Ctrl+C 。 10).日誌文件名稱爲wftp_log.txt,要求文件size上限爲10Mb , 達到最大size時轉存至wftp_log.txt.old ,日誌文件截斷爲0 。
17.C/S架構遠程執行系統的設計實現 。
實現功能:實現功能近似於SSH,客戶端經過請求服務端執行命令(Shell), 並將服務端的命令執行結果返回客戶端輸出 。
要求:
1).項目代碼結構: Rmt_ExecuePro 。 2).make install 時將程序安裝於系統上 。 安裝目錄 : /opt/Rmt_ExecuePro/bin /opt/Rmt_ExecuePro/tool /opt/Rmt_ExecuePro/log 3).主服務程序的名稱爲:Rmt_ExecueServ 。 4).程序的實例啓動與中止由 Unix_Chat_Cctl 來控制 。 Rmt_ExecueCtl start <=啓動服務 Rmt_ExecueCtl stop <=中止服務 服務器程序(Rmt_ExecueServ)只能啓動一個實例 。 服務中止時,再也不接收客戶鏈接請求,告知客戶端退出,等待全部客戶端退出後服務中止 。 5).運行時日誌輸出到如下文件: /opt/Rmt_ExecuePro/log/Rmt_Serv_log.txt 日誌文件的size爲10Mb,到達size上限時則截斷文件爲0 。 6).客戶端程序爲 Rmt_cli ,客戶端啓動: *** Rmt_cli user@server-ip cmdline , 如: Rmt_cli redhat@192.168.1.1 "ls /mnt -l" 客戶端收到服務端的命令結果 或 按Ctrl_C退出 (斷開鏈接,回收資源)。 7).鏈接時須要輸入用戶密碼,待服務器端用戶認證成功的狀況下再執行命令, 不然服務端將用戶認證失敗的消息反饋給客戶端。 8).服務端容許同時連接的客戶端數最大爲256個(Server端控制)。
18.多用戶在線交際服務系統 。
功能要求:
1).基於C/S架構,使用UDP協議。 2).支持 用戶註冊/登陸/添加好友/加入羣組/刪除好友/退出羣組/申請羣組 功能 。 3).用戶註冊時將被服務器分配一個賬號,由字母與數字組合共8位組成(可爲全字母或全數字)。 4).羣組的賬號也爲服務器分配,由字母與數字組成的10位數(可爲全字母或全數字)。 5).所有 用戶/羣組/好友列表 保存在文件,服務重啓後依然能夠正常運行。 6).本地用戶也會保存本身的 羣組/好友列表,在下列時刻實施與服務器同步並刷新本地列表: 登陸時/被他人刪除好友時/被剔除羣組時/新增好友時/新加入羣時 7).羣組的好友增刪由羣組管理員完成,普通成員可申請加入/邀請他人加入。 羣組管理員由申請者擔當,管理員可將管理權交給其餘成員。 做爲羣組管理員,不能夠退出羣組,若要退出需將管理員權限移交其餘成員。 8).羣組中成員上限爲500人,每一個普通用戶可添加的羣組個數爲100個。 9).每一個成員可建立的羣的個數爲5個。 10).好友添加/羣組加入等申請發出時,若對方不在線,則離線保留10天,等待對方上線時再通知。 11).好友登陸成功後,可進行私聊或羣聊,以及上述各項合法操做。 12).支持用戶數爲1億,羣組數爲10萬個。
設計要求:
1).項目代碼結構: Unix_Chat_net 。 2).make install 時將程序安裝於系統上 。 安裝目錄 : /opt/Unix_Chat/Serv/bin /opt/Unix_Chat/Serv/log /opt/Unix_Chat/Serv/conf /opt/Unix_Chat/Cli/bin /opt/Unix_Chat/tool 3).主服務程序的名稱爲:Unix_ChatPro 。 4).程序的實例啓動與中止由 Unix_ChatCtl 來控制 。 Unix_ChatCtl < start | stop > <=啓動/中止服務 服務器程序(Unix_ChatPro)只能啓動一個實例 。 服務中止時,再也不接收客戶鏈接請求,告知客戶端退出,等待全部客戶端退出後服務中止 。 5).運行時日誌輸出到如下文件: /opt/Unix_Chat/Serv/log/Unix_Chat_log.txt 日誌文件的size爲20Mb,到達size上限時則轉存至Unix_Chat_log.txt.old 。 6).客戶端程序爲 Unix_ChatCli ,客戶端啓動: Unix_ChatCli <username> <password> ,
客戶端啓動後鏈接上Server以後刷新同步本地好友及羣組列表。 客戶端的中止用 Ctrl_C 按鍵觸發 (斷開鏈接,回收資源)。
7).單次會話可發送的消息字節數上限爲512個字符 。 8).用戶密碼傳送時採用密文傳送,加密算法爲md5。
19.可靠UDP通訊
設計一個基於UDP協議,可靠通訊服務。
要求:
1.比UDP可靠。 2.比TCP快。
---------------------------------------- end --------------------------------------