freopen()——重定向標准輸入輸出流


                            freopen()——重定向標准輸入輸出流

 

 頭文件stdio.h


 函數原型FILE * freopen(const char *filename , const char *type ,  FILE *stream);


       例:

freopen(“in.txt”,”r”,stdin); freopen(“out.txt”,”w”,stdout);

 參數說明


  filename: 文件名,用於存儲輸入輸出的自定義文件名。例:"debug\\in.txt" ,可以是路徑。

  type: 文件打開的模式。和fopen中的模式(如r-只讀, w-寫)相同。

  stream: 一個文件,通常使用標准流文件。

    (這里的流不是C++中的概念,C++中的流是指對象,廣義的流是指默認輸入輸出設備。在unix/linux系統中,所有東西都可以看成文件,所以默認輸入輸出設備也可以看成一個文件。

    標准流文件具體是指stdin、stdout 和stderr。

    其中stdin是標准輸入流,默認為鍵盤;stdout是標准輸出流,默認為屏幕;stderr是標准錯誤流,一般把屏幕設為默認。)

  返回值如果成功則返回該指向該stream 的指針,否則為NULL。


       Ps: 

FILE *fp; fp = freopen(“in.txt”,”r”,stdin); if (fp == NULL)     //可以用這種形式來判斷與文件的連接是否建立成功
 cout<<”Open error!”<<endl;

  功能


  實現重定向,把預定義的標准流文件定向到由path指定的文件中。

  例如默認的標准輸入流(stdin)是指向鍵盤,現在可以利用freopen()函數讓他重定向,指向為一個文件。

  這樣本來從鍵盤輸入的數據就可以從文件中讀入了。

 

  使用舉例:



1
#include <stdio.h> 2 3 #include <iostream> 4 5 using namespace std; 6 7 8 9 int main() 10 11 { 12 13 FILE *fp; 14 15 fp = freopen("in.txt","r",stdin); //freopen() 的返回值,如果與文件連接建立失敗,返回NULL 16 17 if(fp!=NULL){ //與文件連接建立成功 18 19 int a; 20 21 cin>>a; //從文件中讀入數據 22 23 cout<<a<<endl; //在屏幕上顯示數據 24 25 } 26 27 else //建立失敗 28 29 cout<<"Open error!"<<endl; 30 31 return 0; 32 33 }

  

 詳解:


       這個函數的關鍵是對標准輸入輸出流文件進行重定義。

       標准輸入輸出流文件包括 stdin 、stdou 、stderr。

       那么“流”是什么呢?

       流是一個文件。它包含了對設備的描述,操作系統可以通過它對設備進行操作。可以說,他是抽象化出來的物理設備,以文件的形式展現。例如,標准輸入流stdin就代表了鍵盤,標准輸出流stdout代表了屏幕。

       再抽象化一點說,“流”相當於一個橋梁,它是系統與鍵盤屏幕等輸入輸出設備交流的渠道。例如,標准輸入流stdin,它一端是鍵盤,另一端是鍵盤緩沖區,數據從物理的鍵盤通過stdin這座橋梁傳送到了緩沖區里。電腦就可以對數據進行操作了。

       而freopen ()的作用就是重定向這座橋梁(“流”)。將它的一端指向為另一個文件。這樣就修改了數據的導向,原來數據可能從鍵盤中讀入,現在可能變為了從文件中讀入。

    

 

 返回默認的stdout/stdin


 若要返回默認的stdout/stdin,使用以下調用:

  freopen(“CON”,“w”,stdout);  //輸出到控制台“CON”

檢查 freopen() 以確保重定向實際發生的返回值。

//來自“百度百科 - freopen” //下面是短程序演示了 stdout 時重定向:

/*Compile options needed: none*/ #include <stdio.h> #include <stdlib.h>
void main(void) { FILE *stream ; //將內容寫到file.txt, "W"是寫 ("r"是讀)
    if((stream = freopen("file.txt", "w", stdout)) == NULL) exit(-1); printf("this is stdout output\n"); stream = freopen("CON", "w", stdout);/*stdout 是向程序的末尾的控制台重定向*/ printf("And now back to the console once again\n"); }

   文件打開方式總結


 

 字符串    含義 "r"     以只讀方式打開文本文件 "w"    以只寫方式打開文本文件,已存在的將被覆蓋 "a"   以只寫方式打開文本,指針指向文件尾,原文件保留 "+" 與上面的字符串組合,表以讀寫方式打開(還有這個) "b"   與上面的字符串組合,表打開二進制文件

 

 

 

 Freecode : www.cnblogs.com/yym2013


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM