Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Передача и возврат результата запроса из терминала C# или C++  (Прочитано 1577 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн MYASO-_-

  • Автор темы
  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Здравствуйте уважаемые убунтоюзеры. Есть такой вопрос: как передать запрос в терминал из программы, и вернуть результат в программу?
Тема курсовой "диспетчер задач", для win пишется просто и непринужденно, а тут я даже не знаю. Ни библиотек для процессов не нашел, ни примера, как надо передавать данные в терминал.
Если кто знает как это делать, или (я уж и не мечтаю) исходники простенького диспетчера пожалуйста поделитесь )

Оффлайн alienonline

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Проще из терминала передать в окошко все что пожелаете...

Оффлайн _XDD_

  • Участник
  • *
  • Сообщений: 108
    • Просмотр профиля
MYASO-_-,
именованный канал,
очередь сообщений?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
MYASO-_-,
Постановка задачи просто шикарна.
А теперь еще раз по русски, пожалуйста.

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Тема курсовой "диспетчер задач", для win пишется просто и непринужденно, а тут я даже не знаю. Ни библиотек для процессов не нашел, ни примера, как надо передавать данные в терминал.
Просто надо немного потратить времени, дабы научиться подбирать кейворды для запросов к гуглу. В случае windows можно просто добавлять к любому запросу "msdn", в линуксе нет. Кстати, утилита man тоже пригодится, немного позже.

Диспетчер задач можно реализовать путём контроля за директорией /proc. Это виртуальная файловая система, при запросе к любому файлу или директории в /proc ядро Linux генерирует актуальный результат. Собственно каждая директория в /proc, название которой - число, хранит актуальную информацию о состоянии процесса с pid, соответствующим имени директории.

Если всё-таки надо вызвать утилиту, передать и вернуть результаты можно с помощью именованных каналов. Некоторые библиотеки могут скрыть эти детали за удобным интерфейсом, например в Qt есть класс QProcess. Но есть смысл отказаться от вызова команд и использовать функции POSIX и обход диретории /proc.

P.S. Обновлять список процессов придётся повторным обходом /proc. Вообще-то в линуксе есть inotify, позволяющий программе отслеживать выбранные типы изменений в папке, но для директории /proc inotify не работает.

Оффлайн Daynin

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
    • Google+
Так можно из вашего приложения работать с различными программами, запускаемыми в терминале.
Код: (csharp) [Выделить]
Process p = new Process ();
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;

//Здесь вводим имя запускаемого приложения
p.StartInfo.FileName = "app_name";
//Здесь - аргументы для него
p.StartInfo.Arguments = "args";

p.Start();
p.WaitForExit();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
//В output получаем вывод этого приложения.
Замечательный тут у вас форум! Много интересных людей.

 

Страница сгенерирована за 0.051 секунд. Запросов: 25.