![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
Здравствуйте.
Я пишу клиент-серверное приложение, с помощью которого будет возможно управление другим компьютером(в локальной сети) через командную строку. Подскажите каким образом можно осуществить запуск командной строки, передача ей команды и получение результатов выполнения команды в своё приложение. |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Планируется управлять сервером со стороны клиента?
Что имеется в виду под "командной строкой"? Если первое верно, то можно написать консольный клиент, который подключается к серверу и отправляет ему сообщения, которые вводятся в консоли, а сервер уже что-то делает в зависимости от этих текстов. |
|||
|
||||
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
В том то и дело, что передавать команды получается, а вот выполняться эти команды(команды windows) не выходит, потому что нужно на стороне сервера запустить консоль windows и передать ей команды на выполнение.
И клиент и сервер консольные. Команды предназначены только для командной строки Добавлено через 4 минуты и 28 секунд Я думал сделать это через pipe, но вот не получается получить результат работы. Например я хочу предать в консоль команду calc. Передать получается и она выполнится, а вот если передать команду help, то список команд, который должен вывестись не могу принять. |
|||
|
||||
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Клиент отправляет серверу лишь текст, который сервер воспринимает по-своему. Например обработка команд на сервере может быть такой:
Добавлено через 2 минуты и 58 секунд Это программы, которые сервер может запустить функцией system("program_name");, например
|
||||
|
|||||
| Modul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 17.2.2006 Репутация: нет Всего: нет |
Бота пишите ? Не есть гут конечно. Вот и надо консоль запустить, а иначе никак. --------------------
I'll be back ! |
|||
|
||||
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
Ага так даже проще. Спасибо.
А нельзя ли получить текстовый результат той же команды help? |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Для этого уже нужно использовать pipe'ы.
|
|||
|
||||
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
С ними я сейчас и мучаюсь. Получилось передать команду а принять вывод не получается (
|
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Можно попробовать всякие выкрутасы - в зависимости от команды - перенаправить поток в файл, а после выполнения команды читать этот файл.
|
|||
|
||||
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
Что-то подобное я делал, но хотелось бы напрямую, ведь хранить в файле не очень хорошо на мой взгляд. Вообще возможно ли через pipe получить вывод командной строки, а то может зря мучаюсь?
Это сообщение отредактировал(а) vadimp56 - 3.2.2011, 14:37 |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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). |
|||
|
||||
| vadimp56 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 8.4.2010 Где: Москва Репутация: нет Всего: нет |
Хм... видимо так и сделаю. Большое спасибо за помощь.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
telnet не устроит?
Если хочется своего велосипеда, то создавайте 2 пары пайпов (на ввод и на вывод), и запускайте вашу консольную программу, перенаправив ей ввод и вывод в эти пайпы. У себя в программе в цикле читаете и пишете 2 ответных конца пайпов и дальше делаете с ним, что хотите Не айс Они то как раз в сновном на пайпах и живут. Добавлено через 1 минуту и 58 секунд Идеология вплне кроссплатформенна. Реализация (на Win и Linux) тоже совпадает (даже имена функций совпадают) |
|||
|
||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Unix формирует виртуальные файлы после своего запуска и каждое физическое устройство представлено в виде файла и для общения с ним нужно писать и читать именно файлы этого устройства. А раздражение от создания рядом с бинарником всяких файлов больше похоже на синдром навязчивого состояния Это сообщение отредактировал(а) KaraKum - 4.2.2011, 12:54 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
ТС запускал программу и хотел получить ее ввод и вывод. При чем тут 'физические устройства'? И какие 'физические устройства' использует Linux например в такой команде:
|
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |