2012-05-22 63 views
0

我尝试从unix中的C++程序调用wget。我想在使用fork之后在子进程中调用它,我需要使用exec而不是system()。我所做的是正确使用exec命令在unix中调用wget

pid_t pID = fork(); 
if (pID == 0) 
{ 
    execl("/bin/wget","wget", "http://google.gr",(char*)0); 
} 

,并期望有在同一个文件夹中的可执行文件是, 但这种情况不会发生,我应该如何去做正确的HTML文件?

+0

我不会建议完全限定路径 - 并非每个系统上安装的软件都必须具有wget in/bin;有时它可能位于'/ usr/bin','/ usr/local/bin'等等。运行你的软件的用户可能有一个自定义的wget,他们希望在他们的本地PATH中使用它们。只需在第一个参数中用'wget'调用它就会导致搜索PATH,这样就可以在任何地方找到二进制文件。 –

+0

非常感谢,实际上我做错了的是该路径是/ usr/bin/wget,但是您的建议是在第一个参数中使用wget调用它是正确的解决方案,再次感谢 – user985409

+0

我添加了一个描述使用正确错误处理 - 这样做,你的程序会在这种情况下发出“找不到文件”的错误,所以很明显是什么问题 - 并重申上述评论的内容。 –

回答

1

首先,请勿使用/bin/wget - wget将不会始终安装在/bin;仅在第一个参数中单独传递wget将导致PATH被搜索。

其次,你不应该认为execl不会返回。相反,您应该拨打perror()以正确记录错误(然后在您的代码中,以非零状态退出)。

您还可以在父进程上使用strace -f查看正在发生的情况并查找exec,但在任何情况下向您的代码添加错误处理都是正确的。