當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 freopen用法及代碼示例


C語言stdio頭文件(stdio.h)中freopen函數的用法及代碼示例。

用法:

FILE * freopen ( const char * filename, const char * mode, FILE * stream );
重新打開具有不同文件或模式的流
重用打開由指定的文件文檔名稱或更改其訪問權限模式

如果是新的文檔名稱指定後,該函數首先嘗試關閉已經與之關聯的任何文件(第三個參數)並將其取消關聯。然後,無論該流是否成功關閉,freopen打開由指定的文件文檔名稱並將其與正如fopen會使用指定的模式

如果文檔名稱是一個空指針,該函數嘗試更改模式流。盡管允許特定的庫實現來限製所允許的更改,以及在哪種情況下。

這個錯誤指示有效指標會自動清除(好像clearerr被稱為)。

此函數對於重定向預定義的流特別有用,例如stdinstdoutstderr到特定文件(請參見下麵的示例)。

參數

filename
C字符串,包含要打開的文件的名稱。
其值應遵循運行環境的文件名規範,並且可以包含路徑(如果係統支持)。
如果此參數為空指針,則該函數嘗試更改該模式的模式。,就好像使用了當前與該流關聯的文件名一樣。
mode
包含文件訪問模式的C字符串。有可能:
"r"讀:打開文件進行輸入操作。該文件必須存在。
"w"寫:創建一個空文件進行輸出操作。如果已經存在同名文件,則將其內容丟棄,並將該文件視為新的空文件。
"a"附加:打開文件以在文件末尾輸出。輸出操作始終將數據寫入文件的末尾,然後對其進行擴展。重新定位操作(fseek,fsetpos,rewind)將被忽略。如果文件不存在,則創建該文件。
"r+"讀取/更新:打開文件進行更新(用於輸入和輸出)。該文件必須存在。
"w+"寫入/更新:創建一個空文件並將其打開以進行更新(用於輸入和輸出)。如果已經存在同名文件,則將其內容丟棄,並將該文件視為新的空文件。
"a+"追加/更新:打開一個文件進行更新(用於輸入和輸出),所有輸出操作均在文件末尾寫入數據。重新定位操作(fseek,fsetpos,rewind)會影響下一個輸入操作,但輸出操作會將位置移回文件末尾。如果文件不存在,則創建該文件。
隨著模式文件上方的說明符以文本文件。為了打開一個文件二進製文件, 一種"b"字符必須包含在模式細繩。這個額外的"b"字符可以附加在字符串的末尾(因此采用以下複合模式:"rb","wb","ab","r+b","w+b","a+b")或插入字母和字符之間。"+"混合模式("rb+","wb+","ab+")的符號。

新的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標準庫大神的英文原創作品 C freopen function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。