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