Форум программистов, компьютерный форум CyberForum.ru

Как в C++ получить результат исполнения внешней команды - C++

Восстановить пароль Регистрация
 
Артём007
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
02.09.2013, 18:19     Как в C++ получить результат исполнения внешней команды #1
Вообщем я пишу простейший код:
C++
1
2
3
4
5
6
7
#include <stdlib.h>
#include <iostream>
using namespace std;
 
int main () {
        system("cd");
}
При выполнении он выдаёт мне текущий каталог (скажем "C:\"). Вопрос в том, как сохранить результат исполнения команды в переменную? Команда cd приведена чисто ради примера, в место неё может быть что угодно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2013, 18:19     Как в C++ получить результат исполнения внешней команды
Посмотрите здесь:

Как обнулить массив из внешней функции? C++
необходимо получить результат 6 имея следующие данные C++
C++ Получить вывод команды оболочки - функция, обратная system()
Как работают команды на С + +! очень нужно! C++
В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
02.09.2013, 18:29     Как в C++ получить результат исполнения внешней команды #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <iostream>
#include <stdio.h>
 
std::string exec(char* cmd) {
    FILE* pipe = _popen(cmd, "r");
    if (!pipe) return "ERROR";
    char buffer[128];
    std::string result = "";
    while(!feof(pipe)) {
        if(fgets(buffer, 128, pipe) != NULL)
            result += buffer;
    }
    _pclose(pipe);
    return result;
}
собственно вызываем теперь не через system а через exec, который возвратит строку размером 128 , можно задать и больше вроде
Артём007
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
02.09.2013, 19:10  [ТС]     Как в C++ получить результат исполнения внешней команды #3
Raali, ну возвращает он строку больше 128 символов. А не могли бы объяснить, что делает данный код?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2013, 19:34     Как в C++ получить результат исполнения внешней команды #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
 
int main () 
{
        system("dir > dir.txt");
        fstream fin("dir.txt");
        if (!fin) cout << "Error!" << endl;
        else
        {
            stringstream s;
            s << fin.rdbuf();
            string str = s.str();
            
            cout << str << endl;
            fin.close();
        }
 
        system("pause");
        return 0;
}
Артём007
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
02.09.2013, 19:37  [ТС]     Как в C++ получить результат исполнения внешней команды #5
alsav22, а стоит? Т.е. как я понял, вы сначала записываете результат программы в файл, а потом читаете его? Помоему решение Raali лучше.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
03.09.2013, 10:51     Как в C++ получить результат исполнения внешней команды #6
Цитата Сообщение от Артём007 Посмотреть сообщение
Raali, ну возвращает он строку больше 128 символов. А не могли бы объяснить, что делает данный код?
дак можно выделить буффер побольше char buffer[BUF_SIZE]; и читать из pipe соответственно большее количество байт fgets(buffer, BUF_SIZE, pipe);

Цитата Сообщение от Артём007 Посмотреть сообщение
А не могли бы объяснить, что делает данный код?
дак в принципе тоже самое что и читать файл, только без создания его на диске, а сразу читаем из пайпы
Yandex
Объявления
03.09.2013, 10:51     Как в C++ получить результат исполнения внешней команды
Ответ Создать тему
Опции темы

Текущее время: 10:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru