C 速查手冊

11.7.2 freopen()

stdio.h函數 (function) freopen() 可以打開檔案,然後將處理檔案的必要資訊儲存給回傳的 FILE結構 (structure) ,總共需要三個參數 (parameter) ,前兩個為字串 (string) ,第一個字串為檔案名稱,第二個字串則是開啟模式,第三個參數為串流流向。

開啟模式如下列表

模式功能
"r"讀取文字檔案
"w"新建文字檔案並寫入資料
"a"將資料附加在該文字檔案之後
"rb"讀取二進位檔
"wb"新建二進位檔並寫入資料
"ab"將資料附加在該二進位檔之後
"r+"讀取文字檔案並寫入資料
"w+"新建文字檔案並讀取、寫入資料
"a+"讀取文字檔案將附加資料在檔案最後
"rb+" 或 "r+b"讀取二進位檔並寫入資料
"wb+" 或 "w+b"新建二進位檔並讀取、寫入資料
"ab+" 或 "a+b"讀取二進位檔將附加資料在檔案最後

所謂的串流流向是指資料行進的方向,串流的英文原文為 stream ,原意就是水流,因為由輸入設備取得資料便像是有一長串電子流進入電腦之中,而將資料輸出到其它裝置的情況也極為類似。由標準輸入裝置取得資料稱為 stdin ,而將資料傳送到標準輸出裝置稱為 stdout ,另有 stderr 專門記錄錯誤的串流資訊。

以下程式示範將原本要顯示於螢幕的文字寫入檔案之中

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fPtr;
    char c;
    
    fPtr = freopen("oldname.txt", "w", stdout);
    if (!fPtr) {
        printf("檔案建立失敗...\n");
        exit(1);
    }
    
    printf("Nature, time, and patience are three great physicians.\n");
    printf("Easier said than done.\n");
    printf("To teach a fish how to swim.\n");
    
    fclose(fPtr);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:cfreopen.c
    功能:示範 stdio.h 中函數 freopen() 的使用
    作者:張凱慶 */

編譯後執行,結果如下

$ gcc cfreopen.c
$ a.out
$

此時無聲無息地跳到下一行,表示程式執行成功,在 UNIX-Like 系統使用 cat 指令可顯示檔案內容,如下

$ cat oldname.txt
Nature, time, and patience are three great physicians.
Easier said than done.
To teach a fish how to swim.
$

上一頁 11.7.1 fopen()
回 C 速查手冊 - 標準程式庫分類索引
下一頁 11.7.3 fflush()
回 C 速查手冊 - 標準程式庫導覽
回 C 速查手冊首頁
回 C 教材首頁
回程式語言教材首頁