C ++ не может вернуть переменную - PullRequest
0 голосов
/ 27 апреля 2011

Привет всем!Этот бит кода всегда возвращает 0, хотя errcheck будет иметь ненулевое значение.Если я использую возврат 1;это работает как ожидалось.Пожалуйста, помогите?

   int errcheck = system(docommand.c_str());
    if (errcheck != 0)
    {
        cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl;
        return errcheck;
    }

Вот полный код:

#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
    umask(0);
    mkdir("/tmp/.aget", 0755);
    chdir("/tmp/.aget");

    for (int i = 1; i < argc; i++)
    {

        string target(argv[i]);
        string docommand("");
        string s1("wget -q http://aur.archlinux.org/packages/");
        string s2("/");
        string s3(".tar.gz");
        docommand += s1;
        docommand += target;
        docommand += s2;
        docommand += target;
        docommand += s3;
        cout << "Downloading AUR tarball for '" << target << "'..." << endl;
        int errcheck = system(docommand.c_str());
        if (errcheck != 0)
        {
            cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl;
            return errcheck;
        }
    }

    for (int i = 1; i < argc; i++)
    {
        string target(argv[i]);
        string docommand("");
        string s1("tar xf ");
        string s2(".tar.gz");
        docommand += s1;
        docommand += target;
        docommand += s2;
        cout << "Extracting '" << target << ".tar.gz'..." << endl;
        system(docommand.c_str());
    }

    for (int i = 1; i < argc; i++)
    {
        string target(argv[i]);
        string docommand("");
        chdir("/tmp/.aget");
        chdir(target.c_str());
        system("makepkg -csim --noconfirm > /dev/null");
    }

    rmdir("/tmp/.aget");

    return 0;
}

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Статусы выхода Unix ограничены значениями 0-255, диапазон беззнакового 8-битного целого числа. Таким образом, вы не можете видеть 2048.

См. Статус выхода вики-страница для получения дополнительной информации.

0 голосов
/ 27 апреля 2011

Я подозреваю, что wget всегда возвращает 0.

Это связано с тем, что фактический статус ошибки из http-запроса находится в потоке.

...