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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Артём007
2 / 2 / 0
Регистрация: 04.02.2012
Сообщений: 46
#1

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

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

Вообщем я пишу простейший код:
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++ получить результат исполнения внешней команды
Посмотрите здесь:

Как получить результат выполнение system()? - C++
Добрый день. Как мне получить результат выполнения команды system() в какую, нибудь переменную? Добавлено через 24 секунды К примеру...

Получить вывод команды оболочки - функция, обратная system() - C++
Доброго времени суток, товарищи! Расскажите, пожалуйста, существует ли в С++ функция, обратная по действию system(). То есть, если...

не могу получить желаемый результат в программе - C++
Сама программа компилируется и выводит желаемое количество чисел. но при условии прекратить задачу продолжает выводить числа. Не выводит...

необходимо получить результат 6 имея следующие данные - C++
int a; a=3.7+2; как получить 6????

на С++ получить результат аналогичный команде start %1 в cmd - C++
на С++ получить такой же результат как после работы скрипта на cmd (файл 1.cmd): @echo off start &quot;&quot; %1 exit Т.е. если...

Как обнулить массив из внешней функции? - C++
Здравствуйте. Нужно составить функцию, которая обнуляет массив, переданный по ссылке. У меня не получается это сделать. Помогите. ...

Расставить среди цифр знаки арифметических операций и скобки, чтобы получить необходимый результат - C++
Собственно, вот задача: Вводится строка не более чем из 6 цифр и некоторое целое число R. Расставить знаки арифметических операций...

Как создать в оперативной или во внешней памяти некую структуру наподобие домино? - C++
Как создать в оперативной памяти или во внешней памяти некую структуру наподобие домино состоящую из &quot;квадратиков&quot; - носителей...

В массиве записаны результаты N игр футбольной команды. Определить количество выигрышей, количество проигрышей и количество ничьих данной команды. - C++
Помогите пожалуйста решить задачу. НА С# труда не составляет а вот на С++ не получается. 1. В массиве записаны результаты N игр...

Как грамотно описать следующие команды - C++
Как правильно и грамотно описать в курсовой работе следующий код, который преобразует вещественное число для его представления в формате...

Как работают команды на С + +! очень нужно! - C++
Вот программа #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;ukrainian&quot;); ...

Задачу создать 2-мя способами:1) передавать результат работы подпрограммы через результат, возвращаемый функци - C++
Здравствуйте, дорогие форумчане! Будьте добры, помогите не совсем опытному юзеру разобраться с небольшим непониманием : дано условие (см....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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
5416 / 4812 / 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
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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++ получить результат исполнения внешней команды
Ответ Создать тему
Опции темы

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