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

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

 

 頭文件stdio.hios


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


       例:this

freopen(「in.txt」,」r」,stdin); freopen(「out.txt」,」w」,stdout);

 參數說明spa


  filename: 文件名,用於存儲輸入輸出的自定義文件名。例:"debug\\in.txt" ,能夠是路徑。操作系統

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

  stream: 一個文件,一般使用標準流文件。unix

    (這裏的流不是C++中的概念,C++中的流是指對象,廣義的流是指默認輸入輸出設備。在unix/linux系統中,全部東西均可以當作文件,因此默認輸入輸出設備也能夠當作一個文件。指針

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

    其中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

相關文章
相關標籤/搜索