Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
1

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

02.09.2013, 18:19. Просмотров 2092. Ответов 5
Метки нет (Все метки)

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

Оценить время исполнения программы, собственные команды
Нашел старую задачу, долго над ней думал, кое-что наработал, но не решил Реализовал почти все...

[Задача] Объясните результат исполнения программы
// Файл t1.cc #include &lt;iostream&gt; class C { int x; public: C() { x = 10; } ...

Как вывести результат исполнения этой программы?
Написал программу, она работает проверял в turbo debbuger. Но не могу понять как вывести результат...

Получить результат выполнения команды "system"
нужно получить результат команды system,например system(&quot;pause&quot;),нужно сделать так,чтобы выводимая...

5
844 / 435 / 110
Регистрация: 06.07.2013
Сообщений: 1,445
02.09.2013, 18:29 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 , можно задать и больше вроде
2
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
02.09.2013, 19:10  [ТС] 3
Raali, ну возвращает он строку больше 128 символов. А не могли бы объяснить, что делает данный код?
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.09.2013, 19:34 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;
}
2
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
02.09.2013, 19:37  [ТС] 5
alsav22, а стоит? Т.е. как я понял, вы сначала записываете результат программы в файл, а потом читаете его? Помоему решение Raali лучше.
0
844 / 435 / 110
Регистрация: 06.07.2013
Сообщений: 1,445
03.09.2013, 10:51 6
Цитата Сообщение от Артём007 Посмотреть сообщение
Raali, ну возвращает он строку больше 128 символов. А не могли бы объяснить, что делает данный код?
дак можно выделить буффер побольше char buffer[BUF_SIZE]; и читать из pipe соответственно большее количество байт fgets(buffer, BUF_SIZE, pipe);

Цитата Сообщение от Артём007 Посмотреть сообщение
А не могли бы объяснить, что делает данный код?
дак в принципе тоже самое что и читать файл, только без создания его на диске, а сразу читаем из пайпы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2013, 10:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Отображение прогресса исполнения для команды copy
Здравствуйте. Вставьте пожалуйста эту команду в прогресс бар какой нибудь. Примеров на форуме куча....

Вывести результат выполнения команды HELP в текстовый файл так, чтобы у каждой команды был порядковый номер
Всем привет, нужна помощь! Необходимо команду help вывести в текстовый документ, чтобы у каждой...

Результат исполнения функции
Результат исполнения функции D=POS('T', 'АЭРОПОРТ');

Как с использованием ADO во время исполнения я могу получить структуру базы?
Вопрос: как с использованием ADO во время исполнения я могу получить структуру базы, т.е. список...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.