Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我尝试从 unix 中的 c++ 程序调用 wget。我想在使用 fork 后在子进程中调用它,我需要使用 exec 而不是 system()。我所做的是
pid_t pID = fork(); if (pID == 0) { execl("/bin/wget","wget", "http://google.gr",(char*)0); }
并期望在可执行文件所在的同一文件夹中有一个 html 文件,但这不会发生,我应该如何正确执行?
首先,不要使用/bin/wget--wget不会总是安装在/bin; 仅在第一个参数中单独传递wget将导致 PATH 被搜索。
/bin/wget
wget
/bin
其次,你不应该假设它execl不会返回。相反,您应该调用perror()以在错误之后正确记录错误(然后在您的代码中以非零状态退出)。
execl
perror()
您还可以使用strace -f父进程查看正在发生的事情并查找 exec,但是在任何情况下,向您的代码添加错误处理都是正确的。
strace -f