freopen 同時通用於 C 與 C++,進行 I/O stream 重導。
例如:
將 stdio 導入檔案,再導回螢幕,可製作出如 gotoxy() 般,freopen ("in.txt", "r", stdin); freopen ("out.txt", "w", stdout); freopen ("err.txt", "w", stderr); ..... // reset: freopen ("CON", "r", stdin); //DOS freopen ("/dev/console", "r", stdin); //Linux
游標上下左右移的效果。
#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; struct Redirect { FILE* f; ~Redirect() {fclose (stdout);} Redirect (char* path) { f = freopen (path, "w", stdout); if (!f) { puts ("redirect fail!"); exit(~0); } } } Redirect ("out.txt"); int main () { cout << "Hello, World!"; puts ("\n redirection OK!"); return system ("pause"); }輸出至 out.txt 的內容:
freopen ("in.txt", "r", stdin); 請按任意鍵繼續 . . . Hello, World! redirection OK!
system (..) 會亂序,因為呼叫它會喚起 cmd 程序,
造成 main 與 cmd 兩個 thread 各自獨立輸出,
輸出結果則和 OS scheduling 有關。
沒有留言:
張貼留言