当前位置: 技术问答>linux和unix
请教,execlp中的“重定向”
来源: 互联网 发布时间:2016-07-21
本文导语: 直接贴代码, 很简单: int main() { pid_t pid, pr; pid = fork(); if(pid > 0) { printf("child id:%dn", pid); do ...
直接贴代码,
很简单:
如上述代码中,
通过execlp启动Child程序,
同时希望将Child运行的输出,重定向到out中。
但实际运行还是显示到屏幕了,没有重定向到out中。
请问,如何将启动起来的Child的输出重定向到文件中?
最好不要将主程序的输出重定向。。。
很简单:
int main()
{
pid_t pid, pr;
pid = fork();
if(pid > 0)
{
printf("child id:%dn", 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的输出重定向到文件中?
最好不要将主程序的输出重定向。。。
|
试试:
execlp("/bin/sh", "/bin/sh", "-c", "./Child > out", (char*)0);
execlp("/bin/sh", "/bin/sh", "-c", "./Child > out", (char*)0);
|
1L的虽然可行,但是似乎违背了程序的本身意思,否则完全可以用system()来做。
在程序里实现重定向的话,你需要在子进程用open打开out文件,并用dup2()把STDOUT_FILENO作为out文件描述符的拷贝。
在程序里实现重定向的话,你需要在子进程用open打开out文件,并用dup2()把STDOUT_FILENO作为out文件描述符的拷贝。