时间:2019-02-08 标签:c++calllinuxcommandsforkschilds

标签 c++ linux fork wget

在我的 C++ 程序中使用 linux 命令。尝试从数组列表中下载一个 url,一旦一个下载完成,下一个开始....目前只下载数组中的第一个位置,然后停止。

有人看到我正在做的错误吗?

// Begin the downloading process
pid_t child = 0;
child = fork();

if ( child < 0)
{
    cout << "Process Faileld to Fork<<endl;
    return 1;
}
if (child == 0)
    {
        wait(NULL);
    }
else
{
    for(int i = 0; i < numberOfDownloads; i++)
    {
    execl("/usr/bin/wget", "wget",locations[i], NULL);  
    }
}

尝试使用命令 wget 下载某些内容,但出现错误

最佳答案

execl 将当前运行的进程替换为已启动的进程。所以你的循环体只运行一次。您应该将 fork() 放在循环中,假设您想要 fork wgetnumberOfDownloads 个实例。 (但要小心这样的事情)

否则,使用system(),它不会终止您的进程,而是在wget 退出后返回到您的循环。或 popen(),如果您需要对进程进行更多控制并希望读取 wget 输出,而无需自己执行所有繁重的 I/O 操作。

关于时间:2019-02-08 标签:c++calllinuxcommandsforkschilds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469658/

相关文章:

c++ - 关于返回对象地址的困惑

java - 如何使用隐藏终端启动java程序

linux - 如何从文件中获取特定字符串并将其存储在 shell 脚本中的新文件中?

c - fork() - 父进程和子进程访问多个文件

c - 在 C 中使用 fork()、pipe()、dup2() 和 exec() 时遇到问题

c++ - 如何从函数返回单个字符

c++ - 迭代器的比较程度如何?

c++ - list<string> test() 和 list<string> test 区别?

c - Linux系统如何处理文件中的CRLF?

c - Fork 概念,不太了解 fork 的工作原理