- 论坛徽章:
- 0
|
c++中流重定向可以把流的缓冲区替换掉来实现,fork之后的子进程也是被重定向的,但是执行了execv之后,就再也不起作用了。
比如下面:
#include<iostream>
#include<sstream>
#include<fstream>
using namespace std;
int main(int argc,char** argv)
{
int i,j;
ifstream inf("arg");
ofstream ouf("test.ret");
streambuf* outbuf = cout.rdbuf(ouf.rdbuf());
streambuf* inbuf = cin.rdbuf(inf.rdbuf());
cin >> i >> j;
cout << i + j << endl;
return 0;
} |
如果arg里的内容是1 5.那么最后test.ret中的内容就是6
但是如果是下面这样:
#include<...>
int main(int argc,char** argv)
{
ofstream ouf("test.ret");
streambuf* outbuf = cout.rdbuf(ouf.rdbuf());
pid_t pid;
pid = fork();
if(pid == 0)
{
cout << "hello,redir" << endl;
execl("./tt","tt",(char*)0);
}
} |
hello,redir会被输出到文件里,但是./tt的执行结果,也就是输出,会输出到终端。
如果用c里面的freopen的话,它可以传递到子进程和execv的进程里,请问c++里对应的方法可以让重定向在execv之后还生效的吗?
谢谢各位。 |
|