系統程式第二個作業
製作mycp , redirect 功能程式
(1) Hw2_1.c
此為簡易之mycp (copy)程式
1. 可以用來複製指定檔案,在第一個參數指定欲複製的檔案,在第二個參數給予複製檔案檔名,
第三個參數可以設定欲複製的百分比。
(例如:第三個參數給40,則表示只複製第一個參數所指
的檔案最後40%的資料,此參數必須介於0~100)
2. 此一程式必須使用到open、read、write、close以及pread此五個函式。
3. 參數輸入錯誤必須印出錯誤訊息,如執行範例所示。
4. 執行格式:mycp source_file target_file percentage 執行範例畫面:
這題目主要是要練習操作在UNIX/Linux環境下對於檔案的操作
以前對檔案的接觸大多是利用檔案指標(FILE * name)來做開關讀寫的動作
但在UNIX環境下則是利用file descriptor(non-negative integer)來表示檔案的所在
並利用它來操控檔案的動作 其中要求要用到的功能 舉open來說
int open(const char *pathname, int flags, mode_t mode);
return value: 所開檔案的file descriptor
*pathname : 所開檔案名稱的指標
flags:開啟模式(Readonly,Writeonly...)
mode:附加權限 (APPEND,CREAT...)
與之前利用fopen所開檔案相比 open多了有關權限的管理
建立出來的檔案須有加入特定參數(mode)才能進行讀取或寫入的動作
寫這作業是讓我開始注意這些函式傳回值代表的不同意義
以前對於傳回值所扮演的角色都不太去注意 因這作業所用函式都是經由檔案的fd
而fd又是由open所傳回 (read/write)傳回值代表所(讀到/寫入)的檔案大小
最後便是利用這些數值去完成所需功能
作業的要素應該就是開檔、讀檔、寫檔、關檔
其他功能也不多說了 try & error 真的是我學習一個程式的唯一途徑...orz
--------------------------------------------------------------------------------------------------
P.S 寫這個作業時讓我想到compiler作業...@@
當時我也是利用FILE把symbol table建立出來 但助教似乎不太能接受....囧
我想也是 畢竟file I/O的效率比用link list 或 hash差很多....
直接硬寫實在不很優雅......