想象一下,当我们写了个程序,开始是在命令行下运行的程序,后来用MFC之类的改写为窗体程序,原先用printf输出的trace都不可见了,但是我们又需要(输出到文件分析),怎么办?
1、开始写的时候你定义一个MyTrace的宏;2、你可以把printf换成fprintf;3、使用输出重定向。第一种情况很方便,可程序已经写出来了,显然不大可能;
第二种情况可以是可以,但劳动量比较大;第三种我觉得可以。还记得不,在windows终端输入 "dir > 1.txt",或在linux终端输入"ls > 1.txt",即可实现把当前目录的文件列表导出到"1.txt"中。这里就用到了输出重定向,很方便吧,我们也可以仿照这个去做。
这里只是提供一个思路,下面有几段IO重定向的示例代码,有C的,python的,还有perl的(年终总结,三种语言都总结了,哈哈),仅供参考。
基于c的示例代码:
1 /* 2 File : redirect.c 3 Author : Mike 4 E-Mail : Mike_Zhang@live.com 5 */ 6 #include7 #include 8 9 void test_stdin()10 {11 char buf[128];12 freopen("1.txt", "r", stdin); //redirect stdin13 scanf("%s",buf);14 printf("%s\n",buf);15 freopen("CON", "r", stdin); //recover(Windows)16 //freopen("/dev/console", "r", stdin); //recover(Linux)17 //freopen("/dev/pts/0", "r", stdin); //recover stdin(Linux : my putty client)18 scanf("%s",buf);19 printf("%s\n",buf);20 }21 22 void test_stdout()23 {24 freopen("1.txt", "w", stdout); //redirect stdout25 printf("test");26 freopen("CON", "w", stdout); //recover stdout(Windows)27 //freopen("/dev/console", "w", stdout); //recover stdout(Linux)28 //freopen("/dev/pts/0", "w", stdout); //recover stdout(Linux : my putty client)29 printf("OK\n");30 }31 32 int main()33 {34 printf("Test stdout : \n");35 test_stdout();36 printf("Test stdin : \n");37 test_stdin();38 return 0;39 } 基于python的示例代码:
1 #! /usr/bin/python 2 import sys 3 ''' 4 File : redirect.py 5 Author : Mike 6 E-Mail : Mike_Zhang@live.com 7 ''' 8 print "Test stdout : " 9 #redirect stdout10 tmp = sys.stdout11 fp = open("1.txt","w")12 sys.stdout = fp13 print 'Just a test'14 sys.stdout = tmp #recover stdout15 print 'test2'16 fp.close()17 18 print "Test stdin : "19 #redirect stdin20 tmp = sys.stdin21 fp = open("1.txt","r")22 sys.stdin = fp23 strTest = raw_input()24 print strTest25 sys.stdin = tmp # recover stdin26 strTest = raw_input()27 print strTest28 fp.close()基于perl的示例代码:
1 #! /usr/bin/perl 2 =cut 3 File : redirect.pl 4 Author : Mike 5 E-Mail : Mike_Zhang@live.com 6 =cut 7 8 #redirect STDOUT 9 print "Test stdout : \n";10 open LOG,"> 2.txt";11 select LOG;12 print "just a test\n";13 #recover STDOUT14 select STDOUT;15 print "just a test2\n";16 close LOG;17 18 #redirect STDIN19 print "Test stdin : \n";20 open LOG2,"< 2.txt";21 $line =;22 print $line;23 close LOG2;24 $line = ;25 print $line; 好,就这些了,希望对你有帮助。