由淺入深c經典項目10例

由淺入深經典項目10例
爲了使讀者能熟練地掌握Unix下C語言的編程,本處精選了10個項目,其中每個項目都包含了一類或綜合了多類知識點。讀者需要獨立完成這些項目,這樣一方面可以加深對Unix下C語言編程知識的瞭解,另一方面,由於這裏的項目直接來源於生產實踐或者本身就是生產項目,讀者可以直接應用於工作中去。
C.1 文件系統管理器
本項目包括字符界面下管理文件系統的一系列功能,比如創建目錄、刪除目錄、移動文件、刪除文件、列目錄、查詢文件、統計目錄佔用空間和報告磁盤剩餘空間等。本項目主要涉及了文件子系統的相關內容。
1. 創建目錄程序mkdir
本程序創建指定的目錄,其命令行格式爲:
mkdir 目錄名
當指定的是不帶路徑時目錄時,程序mkdir在當前目錄下創建該目錄。當指定是一個帶路徑的字符串時,程序mkdir將分別創建其中的每一級目錄。
2. 刪除目錄空間rmdir
本程序刪除指定的目錄,其命令行格式爲:
rmdir 目錄名
當指定的目錄下沒有文件時,程序rmdir直接刪除之。當指定目錄下還具有文件時,程序rmdir將詢問操作者是否完全刪除目錄,等待肯定的回答後將刪除指定目錄及其下的所有的文件。
3. 列目錄程序ls
本程序顯示指定文件的屬性信息或指定目錄下的全部文件屬性信息,其命令行格式爲:
ls1 文件名
命令行參數中"文件名"指定了文件的路徑或名稱,本程序打印包括文件權限、鏈接數、用戶名、羣組名、長度、創建日期、創建時間和文件名稱在內的文件屬性信息。如果指定的文件是目錄文件,則打印該目錄下的全部文件信息,如果指定文件是符號鏈接文件,則增加打印被鏈接文件的路徑和名稱。
4. 搜索文件程序find
本程序在指定的目錄下搜索符合要求的文件並打印結果,其命令行格式爲:
find 查詢要求 查詢目錄
其中查詢要求可以是文件權限、鏈接數、用戶名、羣組名、長度、創建日期、創建時間或文件名稱等。
5. 統計目錄佔用磁盤空間程序du
本程序統計指定的目錄下各個文件所佔用的文件空間及其總和,其命令行格式爲:
du 目錄名
程序du深度遍歷指定目錄下的所有目錄和文件、獲取每一個文件佔用的磁盤塊、統計每一個子目錄下所有文件佔用的磁盤塊數量、並彙總計算出指定目錄下所有文件佔用的磁盤塊數量大小。
6. 報告磁盤剩餘空間程序df
本程序獲取指定目錄所在文件系統的當前可用數據塊數和可用i節點塊數、全部數據塊總數和全部i節點塊總數,並統計當前可用數據塊的比率和可用i節點塊的比率,其命令行格式爲:
df 目錄名稱
其中命令行參數指定了待統計的文件系統,如果沒有指定目錄,返回當前系統中所有已mount的文件系統的剩餘空間情況。
C.2 文件管理器
本項目包括字符界面下管理文件的一系列功能,比如拷貝文件、刪除文件、簡單打印文件、交互式打印文件、16進制打印文件和字符串匹配等。本項目主要涉及了文件子系統的相關內容。
1. 拷貝文件程序cp
本程序將源文件複製到目標文件輸出,它的命令行格式如下:
cp1 源文件名 目標文件名
2. 刪除文件程序rm
本程序將指定文件從磁盤中刪除掉,它的命令行格式如下:
rm 目標文件名
3. 打印文件cat
本程序按普通文本格式打印指定的文件的數據內容,它的命令格式如下
cat1 文件名稱
4. 交互式打印文件more
本程序按屏幕分頁打印指定的文本文件的數據內容,用戶可以交互式的輸入命令打印前一頁或後一頁的文件內容。
5. 16進制打印文件od
本程序以十六進制的方式打印指定文件的數據內容,它的命令格式如下:
od 文件名稱
它的輸出格式實例如下:
[0000000]:  7A 68 75 79 75 6E 78 69  
61 6E 67 68 75 70 69 6E  :zhuyunxianghupin
[0000022]:  67
6. 字符串匹配grep
本程序在指定文件中查詢並打印字符串出現的位置,它的命令格式如下:
grep 待匹配字符串 待查找文件或目錄
當待指定的文件是普通文件時,程序grep只在該文件內匹配字符串。如果指定的是目錄文件,程序grep將在該文件下的所有文件中匹配字符串。
C.3 進程管理器
本項目包括在字符界面下管理進程的一系列功能,比如列舉系統當前運行的全部進程信息、啓動進程和向進程發送信號等。本項目主要涉及了Unix下多進程和信號系統等相關內容。
1. 列舉運行進程信息ps
本程序獲取並打印系統當前正在運行的所有進程的屬性信息,屬性項包括進程標識號、父進程標識號、進程進程最近消耗的CPU資源、啓動進程的時間、啓動進程的終端號、進程實際佔用CPU的執行時間、啓動進程的名稱等信息。
2. 啓動進程
在一個進程中啓動另一個程序,並且能夠實時獲取被啓動進程的輸出信息,以便將此信息打印到任何位置。
3. 向進程發送信號
向運行的進程發送控制信息。
C.4 模擬數據庫存儲項目
本項目採用文件模擬數據庫的表格存儲銀行卡交易明細。已知某銀行系統的銀行卡交易流水按如下固定分隔字符串格式儲存:
交易日期|銀行卡號|交易時間|流水號|交易終端號|金額|手續費|......
由於種種原因,該銀行的卡歷史交易流水不能存儲到數據庫中,需要將這些交易明細轉移到文件保存,但又要保持"快"的查找速度。因此我們按照以下規格設計卡交易明細文件:
1. 卡交易流水按日期分別存儲,存儲文件以該日期命名。實際上我們不僅可以每天生成一個文件存儲當天的交易明細,甚至可以將一天的交易流水拆分成若干個文件來存儲。
2. 將該文件分爲3個部分,分別是信息頭部分、索引部分和數據部分:
(1) 信息頭部分指定了文件中最大存儲明細條數的實際存儲的條數。
(2) 索引部分按銀行卡號從小到大的順序存儲了銀行卡交易明細信息索引,其中每行字符代表了一條銀行卡交易索引,採用固定分隔的字符串報文表示,其格式如下:
銀行卡號|在文件中的偏移量
(3) 數據部分中的每行字符都指定了一條銀行卡交易明細信息,其格式爲:
交易日期|銀行卡號|交易時間|流水號|交易終端號|金額|手續費|......
數據部分按照卡號從小到大的順序存儲了交易明細信息,每條交易明細對應索引部分的一條記錄,每條明細在文件中的偏移量都記載在索引部分中。
本項目包括寫入程序和讀取程序,其中寫入程序從外界(比如數據庫)讀入銀行卡明細並轉存到文件中,讀取程序從文件中獲取銀行卡交易明細,它的對外接口如下:
select  *  from line where accdate = "??" and accno = "??"
其中可以選擇只顯式銀行卡明細中的某一、幾項,參數accdate是交易日期,參數accno是交易卡號,交易日期和交易卡號是必須輸入項。
本項目主要涉及了報文解析和文件子系統的相關內容。
C.5 俄羅斯方塊程序設計
在Unix字符界面上實現俄羅斯方塊遊戲,本項目是唯一沒有來源於生產的項目,它主要涉及了curses庫和信號的具體內容。
C.6 IPC對象操作程序設計
本項目設計一個組合了命令ipcs和命令ipcrm功能的程序,它能夠消息隊列、信號量和共享內存等IPC對象進行創建、讀取、寫入、查詢和刪除等重操作。本項目主要涉及了進程間通信的具體內容。
C.7 操作終端外設項目
在生產應用中外設常常連接在終端上,而不同的外設、不同的終端具有不同的操作方法,爲了方便處理,本項目將不同的終端和外設的操作函數設計成專門的動態鏈接庫,應用程序只需把終端和外設的信息配置起來,在操作時調入相應的動態庫函數執行即可。本項目主要涉及了設備文件和庫函數的具體內容。
C.8 聊天項目後臺
設計一個在局域網內聊天的後臺服務程序,它包括用戶登錄、接收聊天數據、轉發聊天數據和退出登錄等功能,本項目主要涉及了併發套接字的具體內容。
C.9 SOCK5代理服務器項目
文檔RFC1928 定了SOCK5代理的規則,本項目根據該文檔設計一個支持SOCKS的代理服務器。本項目幾乎涉及到了Unix下C語言編程中的全部知識。
C.10 網絡遊戲後臺項目
設計一個網絡棋牌遊戲的後臺服務程序,它包括用戶登錄、初始化棋牌、接收出牌信息和轉發出牌信息等功能。本項目幾乎涉及到了Unix下C語言編程中的全部知識。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章