c c 標準IO重定向

2021-08-22 15:22:22 字數 1082 閱讀 6495

這個對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控制代碼。

Linux標準I O和重定向

執行乙個shell命令時,通常會自動開啟三個標準檔案,即標準輸入檔案 stdin 檔案描述符為0,通常對應終端的鍵盤 標準輸出檔案 stdout 檔案描述符為1和標準錯誤輸出檔案 stderr 檔案描述符為2,這兩個檔案都對應終端的螢幕。標準i o和重定向 ls,命令列讀取執行鍵盤敲擊的文字流 ls...

重定向標準輸出

各位看官,今天我們來聊聊標準io流的重定向問題。必須,在程式設計時會輸出大量資訊到螢幕上,非常不方便閱讀,我們可以通過對於標準輸出的重定向,從而使得閱讀更方便。主要涉及的方法為 setin inputstream setout printstream seterr printstream setin...

Linux Shell之IO重定向

一 io裝置 io是指資料的 端與資料的目的端,分別稱為標準輸入 標準輸出 及標準錯誤輸出。程式不必關心裝置的問題,無論是檔案 終端 磁帶機等。在linux預設情況下,會讀取標準輸入 寫入標準輸出,並將錯誤傳遞到標準錯誤輸出。預設情況下標準輸入 輸出 錯誤都是終端。通過下面可知 cat input ...