C語言stdio頭文件(stdio.h)中freopen函數的用法及代碼示例。
用法:
FILE * freopen ( const char * filename, const char * mode, FILE * stream );
重新打開具有不同文件或模式的流
如果是新的文檔名稱指定後,該函數首先嘗試關閉已經與之關聯的任何文件流(第三個參數)並將其取消關聯。然後,無論該流是否成功關閉,freopen打開由指定的文件文檔名稱並將其與流正如fopen會使用指定的模式。
如果文檔名稱是一個空指針,該函數嘗試更改模式流。盡管允許特定的庫實現來限製所允許的更改,以及在哪種情況下。
這個錯誤指示和有效指標會自動清除(好像clearerr被稱為)。
此函數對於重定向預定義的流特別有用,例如stdin,stdout和stderr到特定文件(請參見下麵的示例)。
參數
- filename
- C字符串,包含要打開的文件的名稱。
其值應遵循運行環境的文件名規範,並且可以包含路徑(如果係統支持)。
如果此參數為空指針,則該函數嘗試更改該模式的模式。流,就好像使用了當前與該流關聯的文件名一樣。
- mode
- 包含文件訪問模式的C字符串。有可能:
隨著模式文件上方的說明符以文本文件。為了打開一個文件二進製文件, 一種"b"字符必須包含在模式細繩。這個額外的"b"字符可以附加在字符串的末尾(因此采用以下複合模式:"rb","wb","ab","r+b","w+b","a+b")或插入字母和字符之間。"+"混合模式("rb+","wb+","ab+")的符號。"r" 讀:打開文件進行輸入操作。該文件必須存在。 "w" 寫:創建一個空文件進行輸出操作。如果已經存在同名文件,則將其內容丟棄,並將該文件視為新的空文件。 "a" 附加:打開文件以在文件末尾輸出。輸出操作始終將數據寫入文件的末尾,然後對其進行擴展。重新定位操作(fseek,fsetpos,rewind)將被忽略。如果文件不存在,則創建該文件。 "r+" 讀取/更新:打開文件進行更新(用於輸入和輸出)。該文件必須存在。 "w+" 寫入/更新:創建一個空文件並將其打開以進行更新(用於輸入和輸出)。如果已經存在同名文件,則將其內容丟棄,並將該文件視為新的空文件。 "a+" 追加/更新:打開一個文件進行更新(用於輸入和輸出),所有輸出操作均在文件末尾寫入數據。重新定位操作(fseek,fsetpos,rewind)會影響下一個輸入操作,但輸出操作會將位置移回文件末尾。如果文件不存在,則創建該文件。
新的C標準(不屬於C++的C2011)添加了新的標準子說明符("x"),可以附加到任何"w"說明符(形成"wx","wbx","w+x"或者"w+bx"/"wb+x")。如果文件存在,此子說明符將強製該函數失敗,而不是覆蓋它。
如果遵循此順序,則其他行為取決於庫的實現:某些實現可能會忽略其他字符,例如,"t"(有時用於明確聲明一個文本文件)被接受。
在某些庫實現中,以更新模式打開或創建文本文件可能會將流視為二進製文件。
- stream
- 指向一個的指針FILE標識要重新打開的流的對象。
返回值
如果文件成功重新打開,該函數將返回作為參數傳遞的指針流,可用於識別重新打開的流。否則,將返回空指針。
在大多數庫實現中,errno變量也會在失敗時設置為system-specific錯誤代碼。
示例
/* freopen example: redirecting stdout */
#include <stdio.h>
int main ()
{
freopen ("myfile.txt","w",stdout);
printf ("This sentence is redirected to a file.");
fclose (stdout);
return 0;
}
此示例代碼將通常會轉到標準輸出的輸出重定向到一個名為的文件myfile.txt,該程序執行後包含:
This sentence is redirected to a file. |
相關用法
- C語言 remove用法及代碼示例
- C語言 rename用法及代碼示例
- C語言 tmpfile用法及代碼示例
- C語言 tmpnam用法及代碼示例
- C語言 fclose用法及代碼示例
- C語言 fflush用法及代碼示例
- C語言 fopen用法及代碼示例
- C語言 setbuf用法及代碼示例
- C語言 setvbuf用法及代碼示例
- C語言 fprintf用法及代碼示例
- C語言 fscanf用法及代碼示例
- C語言 printf用法及代碼示例
- C語言 scanf用法及代碼示例
- C語言 snprintf用法及代碼示例
- C語言 sprintf用法及代碼示例
- C語言 sscanf用法及代碼示例
- C語言 vfprintf用法及代碼示例
- C語言 vfscanf用法及代碼示例
- C語言 vprintf用法及代碼示例
- C語言 vscanf用法及代碼示例
- C語言 vsnprintf用法及代碼示例
- C語言 vsprintf用法及代碼示例
- C語言 vsscanf用法及代碼示例
- C語言 fgetc用法及代碼示例
- C語言 fgets用法及代碼示例
- C語言 fputc用法及代碼示例
- C語言 fputs用法及代碼示例
- C語言 getc用法及代碼示例
- C語言 getchar用法及代碼示例
- C語言 gets用法及代碼示例
- C語言 putc用法及代碼示例
- C語言 putchar用法及代碼示例
- C語言 puts用法及代碼示例
- C語言 ungetc用法及代碼示例
- C語言 fread用法及代碼示例
- C語言 fwrite用法及代碼示例
- C語言 fgetpos用法及代碼示例
- C語言 fseek用法及代碼示例
- C語言 fsetpos用法及代碼示例
- C語言 ftell用法及代碼示例
- C語言 rewind用法及代碼示例
- C語言 clearerr用法及代碼示例
- C語言 feof用法及代碼示例
- C語言 ferror用法及代碼示例
- C語言 perror用法及代碼示例
注:本文由純淨天空篩選整理自C標準庫大神的英文原創作品 C freopen function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。