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. |
$ |