免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1592 | 回复: 1
打印 上一主题 下一主题

关于c++中流重定向的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-10 20:45 |只看该作者 |倒序浏览
c++中流重定向可以把流的缓冲区替换掉来实现,fork之后的子进程也是被重定向的,但是执行了execv之后,就再也不起作用了。
比如下面:
#include<iostream>
#include<sstream>
#include<fstream>
using namespace std;

int main(int argc,char** argv)
{
&nbsp;int i,j;
&nbsp;ifstream inf("arg");
&nbsp;ofstream ouf("test.ret");
&nbsp;streambuf* outbuf = cout.rdbuf(ouf.rdbuf());
&nbsp;streambuf* inbuf = cin.rdbuf(inf.rdbuf());
&nbsp;cin >> i >> j;
&nbsp;cout << i + j << endl;
&nbsp;return 0;
}

如果arg里的内容是1 5.那么最后test.ret中的内容就是6

但是如果是下面这样:
#include<...>

int main(int argc,char** argv)
{
&nbsp;ofstream ouf("test.ret");
&nbsp;streambuf* outbuf = cout.rdbuf(ouf.rdbuf());
&nbsp;pid_t pid;
&nbsp;pid = fork();
&nbsp;if(pid == 0)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;cout << "hello,redir" << endl;
&nbsp;&nbsp;&nbsp;execl("./tt","tt",(char*)0);
&nbsp;&nbsp;}
}

hello,redir会被输出到文件里,但是./tt的执行结果,也就是输出,会输出到终端。
如果用c里面的freopen的话,它可以传递到子进程和execv的进程里,请问c++里对应的方法可以让重定向在execv之后还生效的吗?
谢谢各位。

论坛徽章:
0
2 [报告]
发表于 2009-04-10 21:31 |只看该作者
看来只能用freopen了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP