C 輸入輸出重定向

2021-07-11 23:43:35 字數 1225 閱讀 6642

這個對經常在oj上做題的童鞋們很有用。oj基本都是用標準輸入輸出(usaco除外)。但如果你在除錯的時候也都是從控制台輸入,那就太浪費寶貴的時間了。我們可以重定向標準輸入,除錯的時候從檔案讀,提交時從標準輸入讀。

在c語言中,方法比較簡單。使用函式freopen():

freopen("data.in","r",stdin);

freopen("data.out","w",stdout);

這樣就把標準輸入重定向到了data.in檔案,標準輸出重定向到了data.out檔案。

這兩句**之後,scanf函式就會從data.in檔案裡讀,而printf函式就會輸出到data.out檔案裡了。

c++中,對流重定向有兩個過載函式:

streambuf* rdbuf () const;  

streambuf* rdbuf (streambuf *)  

就相當於get/set方法。

streambuf *backup;

ifstream fin;

fin.open("data.in");

backup = cin.rdbuf();   // back up cin's streambuf

cin.rdbuf(fin.rdbuf()); // assign file's streambuf to cin

// ... cin will read from file

cin.rdbuf(backup);     // restore cin's original streambuf

注意最後我們使用了cin.rdbuf(backup)把cin又重定向回了控制台

然而,如果用c語言實現同樣的功能就不那麼優雅了。

因為標準控制台裝置檔案的名字是與作業系統相關的。

在dos/windows中,名字是con

freopen("con", "r", stdin);

在linux中,控制台裝置是/dev/console

freopen("/dev/console", "r", stdin);

另外,在類unix系統中,也可以使用dup系統呼叫來預先複製乙份原始的stdin控制代碼。

輸入輸出重定向

使用標準輸入流,標準輸出流和標準錯誤流,這些標準流都被預分配給鍵盤和顯示器。在需要的時候,可以使用重定向臨時改變這些預設分配。重定向是這樣一種過程,我們借助它指定乙個用於替代某個 標準檔案的檔案。輸入重定向 可以將標準輸入從鍵盤重定向到任何文字檔案。輸入重定向運算子為小於號 意味著該命令從此給 派的...

輸入輸出重定向

1.標準輸入的控制 語法 命令 檔案將檔案做為命令的輸入。例如 mail s mail test wesongzhou hotmail.com file1 將檔案file1 當做信件的內容,主 題名稱為mail test,送給收信人。2.標準輸出的控制 語法 命令 檔案將命令的執行結果送至指定的檔案...

輸入輸出重定向

想象一下,當我們寫了個程式,開始是在命令列下執行的程式,後來用mfc之類的改寫為窗體程式,原先用printf輸出的trace都不可見了,但是我們又需要 輸出到檔案分析 怎麼辦?1 開始寫的時候你定義乙個mytrace的巨集 2 你可以把printf換成fprintf 3 使用輸出重定向。第一種情況很...