到目前為止,我們的輸入與輸出, 都只有利用 UNIX 作業系統所提供的標準輸入或輸出裝置 (stdin and stdout)。 這一節我們要學習開、關磁碟檔案的最基本步驟。 磁碟檔案的處理,難免牽涉到作業系統,所以在各種作業系統中也許會稍有出入。 但是最基本的步驟應該都相同:
FILE *fp;注意 FILE 一定要大寫。 FILE 看起來好像是一個資料型態的樣子,其實不是。 我們現在不便解釋,讀者先照著做就是了。
fp = fopen("a.c", "r");其中 a.c 代表要打開的檔案名,r 代表要讀這個檔案的內容。 注意,這兩個字都必須放在一對雙引號裡面。 如果檔案不存在,或是您的程式打不開 (例如您的帳號沒有讀取的權力), 則 fopen() 會返回 NULL 指標。 NULL 就像 EOF 一樣,是個 C 語言自己知道的符號參數。
fclose(fp);把檔案關上。雖然程式正常結束之後,檔案會自動被關閉。 但是最好養成一個愛整潔的好習慣,記得自己把檔案關閉。
從檔案讀資料的最基本函式就是 getc()。 它的用處和 getchar() 幾乎完全一樣, 只是現在要指定一個檔案指標的變數,從指定檔案中依序讀取一個字元。 以下是一個簡單的測試程式,讀者應該自己改變符號參數 FILENAME。 這個程式嘗試打開一個名叫 FILENAME 的檔案, 如果成功了,就把它的內容寫在標準輸出裝置上。
#include <stdio.h> /* 測試 fopen(), getc() and fclose() (test-getc.c) */ #define FILENAME "a.c" main() { FILE *fp; int c; if ((fp = fopen(FILENAME, "r")) == NULL) printf("File is not readable.\n"); else { while((c = getc(fp)) != EOF) putchar(c); } fclose(fp); }
#define FILENAME "../an_existent_file_name"或者
#define FILENAME "/etc/passwd"它的執行結果就好像 cat FILENAME 一樣。
習題
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: Feb 28, 2001
Last Revised: Feb 28, 2001
© Copyright 2001 Wei-Chang Shann 單維彰