博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入输出重定向
阅读量:7157 次
发布时间:2019-06-29

本文共 2562 字,大约阅读时间需要 8 分钟。

想象一下,当我们写了个程序,开始是在命令行下运行的程序,后来用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 #include 
7 #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;
复制代码

好,就这些了,希望对你有帮助。

转载地址:http://elegl.baihongyu.com/

你可能感兴趣的文章
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
查看>>
领域驱动开发推荐代码示例 — Microsoft NLayerApp
查看>>
Linux 安装Rsync和配置
查看>>
hadoop fs -mkdir testdata错误 提示No such file or directory
查看>>
PostgreSQL security - don't use password method in pg_hba.conf
查看>>
RDS MySql支持online ddl
查看>>
在Hudson中,使用ant自动对安卓项目编译打包apk
查看>>
【JSP开发】利用request获取各种值
查看>>
Vue全家桶web端社区项目
查看>>
多次Push Pop导致的`Can't add self as subview`问题
查看>>
从萌新的角度理解JVM内存管理
查看>>
d3.js 关于力引导图的简单解析
查看>>
pm2实践指南
查看>>
preload和prefetch
查看>>
大数据:一场改变未来的信息革命
查看>>
MAC OS X 安装、配置、启动 rabbitMQ
查看>>
解决webuploader 在chrome 浏览器反应迟钝问题
查看>>
让EditPlus支持javac,java命令[图解]
查看>>
Python初学者的一些技巧
查看>>
centos安装epel源
查看>>