请教,execlp中的“重定向”

LeonTown 2009-12-10 12:30:37
直接贴代码,
很简单:

int main()
{
pid_t pid, pr;
pid = fork();
if(pid > 0)
{
printf("child id:%d\n", pid);
do
{
pr = waitpid(pid, NULL, WNOHANG);
} while(pr == 0);
}
else if(pid == 0)
{
execlp("./Child", "./Child", " > out", (char*)0); //execlp启动已成程序(./Child)
}

return 0;
}


如上述代码中,
通过execlp启动Child程序,
同时希望将Child运行的输出,重定向到out中。

但实际运行还是显示到屏幕了,没有重定向到out中。

请问,如何将启动起来的Child的输出重定向到文件中?
最好不要将主程序的输出重定向。。。
...全文
553 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeonTown 2009-12-10
  • 打赏
  • 举报
回复
您的方法也可以通过。

请教一下,
用system和execlp启动子进程,
有什么区别啊?

[Quote=引用 7 楼 nevil 的回复:]
这样还不如system("./Child > out")
[/Quote]
nevil 2009-12-10
  • 打赏
  • 举报
回复
这样还不如system("./Child > out")
LeonTown 2009-12-10
  • 打赏
  • 举报
回复
谢谢!

这样可以了。

也可以把Child需要的参数一起组装到一个字符串中,作为execlp的一个参数

[Quote=引用 5 楼 steedhorse 的回复:]
试试:
execlp("/bin/sh", "/bin/sh", "-c", "./Child > out", (char*)0);
[/Quote]
晨星 2009-12-10
  • 打赏
  • 举报
回复
试试:
execlp("/bin/sh", "/bin/sh", "-c", "./Child > out", (char*)0);
LeonTown 2009-12-10
  • 打赏
  • 举报
回复
具体您的方法该如何做啊?

另外,这里的子程序Child,没有代码,只能调用

[Quote=引用 2 楼 nevil 的回复:]
1L的虽然可行,但是似乎违背了程序的本身意思,否则完全可以用system()来做。

在程序里实现重定向的话,你需要在子进程用open打开out文件,并用dup2()把STDOUT_FILENO作为out文件描述符的拷贝。
[/Quote]
LeonTown 2009-12-10
  • 打赏
  • 举报
回复 1
用您的方法,
还是没有重定向到文件,
仍然显示到屏幕上了。。。

[Quote=引用 1 楼 steedhorse 的回复:]
试试:
execlp("/bin/sh", "/bin/sh", "-c", "./Child", ">out", (char*)0);
因为只有shell程序才理解“>out”这种东东,execlp函数本身不负责解释shell元字符。
[/Quote]
nevil 2009-12-10
  • 打赏
  • 举报
回复
1L的虽然可行,但是似乎违背了程序的本身意思,否则完全可以用system()来做。

在程序里实现重定向的话,你需要在子进程用open打开out文件,并用dup2()把STDOUT_FILENO作为out文件描述符的拷贝。
晨星 2009-12-10
  • 打赏
  • 举报
回复
试试:
execlp("/bin/sh", "/bin/sh", "-c", "./Child", ">out", (char*)0);
因为只有shell程序才理解“>out”这种东东,execlp函数本身不负责解释shell元字符。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧