Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обмен данными с командной строкой 
V
    Опции темы
vadimp56
Дата 3.2.2011, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



Здравствуйте.
Я пишу клиент-серверное приложение, с помощью которого будет возможно управление другим компьютером(в локальной сети) через командную строку.
Подскажите каким образом можно осуществить запуск командной строки, передача ей команды и получение результатов выполнения команды в своё приложение.
PM MAIL   Вверх
KaraKum
Дата 3.2.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Планируется управлять сервером со стороны клиента?
Что имеется в виду под "командной строкой"?

Если первое верно, то можно написать консольный клиент, который подключается к серверу и отправляет ему сообщения, которые вводятся в консоли, а сервер уже что-то делает в зависимости от этих текстов.
PM MAIL WWW   Вверх
vadimp56
Дата 3.2.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



В том то и дело, что передавать команды получается, а вот выполняться эти команды(команды windows) не выходит, потому что нужно на стороне сервера запустить консоль windows и передать ей команды на выполнение.
И клиент и сервер консольные. Команды предназначены только для командной строки

Добавлено через 4 минуты и 28 секунд
Я думал сделать это через pipe, но вот не получается получить результат работы.
Например я хочу предать в консоль команду calc. Передать получается и она выполнится, а вот если передать команду help, то список команд, который должен вывестись не могу принять.
PM MAIL   Вверх
KaraKum
Дата 3.2.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Клиент отправляет серверу лишь текст, который сервер воспринимает по-своему. Например обработка команд на сервере может быть такой:
Код

//получение массива байтов через какое-либо интернет-соединение:
char* array = recv();
if(strcmp(array, "hi") == 0)
{
      //клиент сказал "привет"...
}
else if(strcmp(array, "create some file") == 0)
{
      //клиент попросил создать какой-то файл:
      FILE* someFile = fopen("some_file.txt", "w");
}
else if ...


Добавлено через 2 минуты и 58 секунд
Это программы, которые сервер может запустить функцией system("program_name");, например
Код

system("calc");

PM MAIL WWW   Вверх
Modul
Дата 3.2.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(vadimp56 @  3.2.2011,  14:12 Найти цитируемый пост)
нужно на стороне сервера запустить консоль windows


Бота пишите ? Не есть гут конечно.

Вот и надо консоль запустить, а иначе никак.
--------------------
I'll be back !
PM MAIL   Вверх
vadimp56
Дата 3.2.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



Ага так даже проще. Спасибо.
А нельзя ли получить текстовый результат той же команды help?
PM MAIL   Вверх
KaraKum
Дата 3.2.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Для этого уже нужно использовать pipe'ы.
PM MAIL WWW   Вверх
vadimp56
Дата 3.2.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



С ними я сейчас и мучаюсь. Получилось передать команду а принять вывод не получается (
PM MAIL   Вверх
KaraKum
Дата 3.2.2011, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Можно попробовать всякие выкрутасы - в зависимости от команды - перенаправить поток в файл, а после выполнения команды читать этот файл.
PM MAIL WWW   Вверх
vadimp56
Дата 3.2.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



Что-то подобное я делал, но хотелось бы напрямую, ведь хранить в файле не очень хорошо на мой взгляд. Вообще возможно ли через pipe получить вывод командной строки, а то может зря мучаюсь?

Это сообщение отредактировал(а) vadimp56 - 3.2.2011, 14:37
PM MAIL   Вверх
KaraKum
Дата 3.2.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



В Линуксе (bash) точно можно перенаправить поток, но как - не помню: "command > file.txt" или "command | file.txt" или "command > some_output_reader file.txt" - что-то вроде этого, но вот могут возникнуть проблемы со временем выполнения команды - после вызова в программе system("command"); можно будет читать файл только после завершения вызванной программы, а время её выполнения неизвестно...
Хотя можно с определённой периодичностью пытаться открыть целевой файл (FILE *someFile = fopen("some_file.txt", "r");) и читать что-то из него только когда someFile != 0.

Добавлено через 4 минуты и 8 секунд
Если нет изначальной предвзятости к методу или непозволительности вероисповедания, то лучше писать в файл, ибо pipe'ы НЕ кроссплатформенны. А обмениваться данными через файлы безопасно и вполне приемлемо - так, например, "живёт" Линукс (любая *nix).
PM MAIL WWW   Вверх
vadimp56
Дата 3.2.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 8.4.2010
Где: Москва

Репутация: нет
Всего: нет



Хм... видимо так и сделаю. Большое спасибо за помощь.
PM MAIL   Вверх
xvr
Дата 3.2.2011, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



telnet не устроит?

Если хочется своего велосипеда, то создавайте 2 пары пайпов (на ввод и на вывод), и запускайте вашу консольную программу, перенаправив ей ввод и вывод в эти пайпы. У себя в программе в цикле читаете и пишете 2 ответных конца пайпов и дальше делаете с ним, что хотите

Цитата(KaraKum @  3.2.2011,  14:40 Найти цитируемый пост)
А обмениваться данными через файлы безопасно и вполне приемлемо
Не айс  smile Лишние файлы, лишний мусор  smile Интерактивные программы так не запустишь

Цитата(KaraKum @  3.2.2011,  14:40 Найти цитируемый пост)
так, например, "живёт" Линукс (любая *nix). 

Они то как раз в сновном на пайпах и живут.

Добавлено через 1 минуту и 58 секунд
Цитата(KaraKum @  3.2.2011,  14:40 Найти цитируемый пост)
ибо pipe'ы НЕ кроссплатформенны.
Идеология вплне кроссплатформенна. Реализация (на Win и Linux) тоже совпадает (даже имена функций совпадают)


PM MAIL   Вверх
KaraKum
Дата 4.2.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

Репутация: 1
Всего: 1



Цитата(xvr @  3.2.2011,  16:31 Найти цитируемый пост)
Они то как раз в сновном на пайпах и живут.

Unix формирует виртуальные файлы после своего запуска и каждое физическое устройство представлено в виде файла и для общения с ним нужно писать и читать именно файлы этого устройства.
А раздражение от создания рядом с бинарником всяких файлов больше похоже на синдром навязчивого состояния  smile 

Это сообщение отредактировал(а) KaraKum - 4.2.2011, 12:54
PM MAIL WWW   Вверх
xvr
Дата 4.2.2011, 13:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(KaraKum @ 4.2.2011,  12:53)
Цитата(xvr @  3.2.2011,  16:31 Найти цитируемый пост)
Они то как раз в сновном на пайпах и живут.

Unix формирует виртуальные файлы после своего запуска и каждое физическое устройство представлено в виде файла и для общения с ним нужно писать и читать именно файлы этого устройства.

ТС запускал программу и хотел получить ее ввод и вывод. При чем тут 'физические устройства'?
И какие 'физические устройства' использует Linux например в такой команде:
Цитата

cat my_file.txt | grep "My String" | grep -v Ignore | less
? Если 'физических устройств' не найдется, то какие 'всякие файлы рядом с бинарником'?


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.