2010年12月28日 星期二

Cout redirection

Redirecting Standard Output (Cout) to a Text File

A couple of times I've needed/wanted to output cout operations to a text file. A solution is:
 
#include <iostream>
#include <fstream>
using namespace std;

int main ()
{
 cout << "This is sent to prompt" << endl;
 ofstream fileOutputStream;
 fileOutputStream.open ("test.txt");
 streambuf* sbuf = cout.rdbuf();
 cout.rdbuf(fileOutputStream.rdbuf());
 cout << "This is sent to file" << endl;
 cout.rdbuf(sbuf);
 cout << "This is also sent to prompt" << endl; 
 return 0;
}
 
However, note that if you call another function from main then fileOutputStream will go out of scope, so if you want to call other functions the file must be made global. i.e.:


#include <iostream>
#include <fstream>
#include <string>
using namespace std; 

ofstream fileOutputStream;  // this must be kept somewhere global

void redirectStandardOutputToFile ( string filePath, bool toPromptAlso )
{
 streambuf* sbuf = cout.rdbuf();
 fileOutputStream.open( filePath.c_str() );
 cout.rdbuf(fileOutputStream.rdbuf());
 if ( toPromptAlso )
  cout.rdbuf(sbuf);
}

void anotherFunction() {
 cout << "The contents of this function is also sent to file";
}

int main ()
{
 redirectStandardOutputToFile("test.txt", false );
 
 cout << "This is sent to file" << endl;
 anotherFunction();
 cout << flush;  // is a good policy to flush or else program might close before text is output.

 return 0;
}



origin from http://www.andrewnoske.com/wiki/index.php?title=Cout_redirection

南方朔觀點-籃子爛了,蘋果當然爛光光!

南方朔觀點-籃子爛了,蘋果當然爛光光!

* 2010-12-28
* 中國時報
* 【南方朔】

 理性啟蒙時代以來,人們都相信青少年乃純潔的白紙,它是浪漫主義的核心信念,十九世紀的蘇格蘭作家巴蘭亭根據這種信念寫了《藍色珊瑚礁》一書,流落荒島的少年男女彷彿創造出了伊甸園一樣。

 而當代諾貝爾文學獎得主威廉.高汀不相信這種廉價的浪漫主義,而寫了《蒼蠅王》。一群家世不錯的學生搭機迫降荒島,他們最初想根據民主原則自我管治,但三搞四搞,人類最壞的品質如鬥爭、專制、殘酷、殺戮全都出現,一群小孩製造出了最邪惡的國度,還死了好幾人。等到救難人員抵達時,都瞠目結舌,驚駭不止。「蒼蠅王」出自希伯萊文的baalzebul,它是以艾康部落的邪神,後來在〈列王記〉和〈馬太福音〉都重新提起它的拉丁名字別西卜阿(Beelzebub),它是個邪惡的神。集一切的蒼蠅邪惡於大成,故稱「蒼蠅王」。威廉.高汀藉著這本著作,讓人們對邪惡問題有了更深的理解。

 近代學術思想界對邪惡問題已有了愈來愈深的認識,德國女思想家漢娜.鄂蘭(Hannah Arendt),美國心理學家米格蘭(Stanley Milgram)都證明了奉公守法,一切照規矩辦事,會讓人做出邪惡之事。前幾年,史丹福大學做了一項監獄模擬實驗,有的學生扮獄卒,有的扮囚犯,這項實驗只做了一個星期就緊急喊卡,因為主持教授發現扮演獄卒的好學生真的凶性大發,而扮演囚犯的好學生亦人格受創,他簡直被嚇壞了。這些研究證明了一個至深的道理,那就是邪惡與好人壞人無關,而是與體制和情境有關。以前出現邪惡的壞事,人們總認為是由少數「爛蘋果」所致,而今則發現在某些時候,它與「爛蘋果」其實無關,而是和整個「爛籃子」有關。當籃子都爛了,再多的蘋果也只好全都爛光光。十七世紀英國文豪米爾頓曾說過:「心乃是人們自己的所在,它會讓天堂變成地獄,也會讓地獄變成天堂。」台灣的國中會天堂變地獄,這絕非少數「爛蘋果」出了問題,而是「爛籃子」的事。

 近年來台灣社會的中學教育日益敗壞。在教育方面,乃是主事的大官校長們只管做秀,拚了命的想搞個甚麼「台灣之光」出來炫耀一番,如此則加官晉爵有望。務虛不務實已成了教育的最高目標,而基礎工作則全都廢弛及被捂蓋,台灣九十五萬國中生,每年霸凌別人及被霸凌者各有十二萬人。

 但往上通報的僅九三八件,幾乎全都被吃案了。而學校霸凌事件氾濫,則和當今大人們的黑社會一枝獨秀,大哥們拚命去校園招募小弟有關。小孩子只要成了小弟,有事就有大哥來罩,在學校就可橫著走路,而且當跑腿小弟還不時有些打賞,吃香喝辣,甚至將來出社會的頭路也都有保障。而當黑道進了校園,其他學生自然也有樣學樣,玩起拉幫結派遊戲,在到處都是蒼蠅的校園,不出一堆蒼蠅王才怪。當整個校園都是橫著走路的小孩,當老師的搞不好就會被套上布袋海扁一頓,誰還敢對學生們去管教?

 國中的那些小孩有錯嗎?他們只是不幸的掉進了「爛籃子」裡,一堆還沒有成熟的青蘋果只好跟著爛下去。十三到十六、七歲的小孩,必須要有良好學習成長環境,必須校園不受社會汙染,但今天的教育早已媚俗當道,從上到下,還有誰會為了孩子們學習環境的創造而努力。今天的校園其實是以一種更離譜的方式在複製著大人社會的價值,長得略有姿色的就準備賣臉蛋,賣身材,長得拳頭大的就準備將來賣拳頭為生。台灣校園霸凌事件氾濫,絕對不是少數爛蘋果所惹的小事,而是攸關台灣教育走向,社會發展的頂級大事。它必須政府站出來為小孩子們守護那一片學習與成長的無汙染空間,但這樣的守護者何在?

 主持監獄模擬實驗的史丹福大學教授秦巴多(Philip Zimbardo)指出,體制出問題的社會,「爛籃子」會誘發一種白紙全都染黑的「墮落天使效應」(Lucifer effect),台灣校園霸凌當道,出現了一群群「蒼蠅王」,即是體制所造成的「墮落天使效應」!(作者為文化評論者)