Получить gcc -v/jdk -v информацию о версии qt6

 Причина в том, что я хочу получить возвращаемое значение gcc -v через функцию.Как показано на рисунке выше, вы можете подумать, что в оболочке это просто команда, но много поворотов и поворотов тратится впустую. код.

1. Для того, чтобы получить возвращаемое значение командной строки, у меня есть следующая функция: 

std::string exec(const char* cmd) {
    char buffer[128];
    std::string result = "";
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

 2. Отлично, вы можете получить возвращаемое значение ls -l;

 3. Попробуйте изменить ifconfig еще раз, он все еще работает; 

4. В это время попробуем gcc -v.Эй,машина перевернулась.Хотя распечатка есть,но возвращаемое значение str недоступно.Почему?

 

5. Попробуйте изменить java -версию, все равно безрезультатно, str не может получить возвращаемое значение;

 

 Позвольте мне упасть в пропасть, я проверял этот код снова и снова, проблем нет... Это потому, что такого рода команды, которые подставляют параметры, не могут получить возвращаемое значение через конвейер? Просидел тут все утро и ничего не получил.Хотел получить через файловый метод и в итоге обнаружил, что это не распространенный способ.В полдень продолжал бороться с этой проблемой,пока не увидел вот эту статью с описанием

 

В это время я вдруг понял, что после запуска каждой программы в оболочке она открывает как минимум три файловых дескриптора, а именно 0: стандартный ввод; 1: стандартный вывод; 2: стандартная ошибка, не только стандартный вывод, но и стандартная ошибка На этот раз я вернулся и изменил вышеуказанные параметры загрузки, и это действительно полностью решило эту проблему.

g++ -v 2>&1

Java-версия 2>&1

 

 

рекомендация

отblog.csdn.net/yanchenyu365/article/details/130684106