LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2433|回复: 7

Linux下C语言中freopen之后,如何将stdin/stdout还原啊~~~

[复制链接]
发表于 2004-12-3 21:49:08 | 显示全部楼层 |阅读模式
我想写一个程序,输入源代码(文件名为a.cpp),这个程序的任务就是

编译代码,生成一个可执行程序,名字比如叫a,a需要的输入文件为a.in

然后这个程序将a.in当stdin输入到程序a,生成一个结果文件,比如叫

a.out.

这个程序该如何写? 用shell也行,c也行。

偶主要的问题是不知道如何重定向stdin,偶用freopen之后,发现自己的

控制台的stdin也被改了,这是怎么回事啊?该如何解决这个问题?

希望各位Linux的高手,大侠们,帮帮小弟呀~~~~
 楼主| 发表于 2004-12-3 21:52:04 | 显示全部楼层

还有一个问题。。。。。

能不能再运行那个a程序的时候,顺便把它占用的资源也测出来

比如说时间,内存什么的??
发表于 2004-12-3 22:52:33 | 显示全部楼层
在重定向之前,先把标准输入输出保存起来。重定向后,再恢复。
 楼主| 发表于 2004-12-3 23:16:21 | 显示全部楼层
能不能具体讲解一下,code也行啊
发表于 2004-12-4 03:07:25 | 显示全部楼层
  1. [color=blue]
  2.         FILE *fp = stdin;              // save stdin
  3.         stdin = fopen(filename, "r");
  4.         ...
  5.         fclose(stdin);
  6.         stdin = fp;                    // restore it!
  7.         scanf(...);                    // using the restored stdin!
  8. [/color]
复制代码

stdin 只不过是个已赋值的指针而已。
 楼主| 发表于 2004-12-4 09:06:54 | 显示全部楼层
可是这样不行,当用了 fclose(stdin) 或者 fclose(stdout) 之后

后面的所有的 printf 都不知道把东西 print 到什么地方去了,不

在文件里面,也不在 console 里面


如果不用freopen, 有没有什么办法将一个进程的io重定向。

比如做自己的IDE的时候,将gcc编译时候的出错的信息,重定向到

一个文件。应该怎么写呀~~
发表于 2004-12-4 10:16:50 | 显示全部楼层
保存重定向要用文件描述符。文件指针应该是指向流的。
搜索论坛吧,这个问题以前回答过。
 楼主| 发表于 2004-12-4 10:56:58 | 显示全部楼层
3x~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表