Как создать приложение linux C с консолью, к которой я могу подключиться удаленно - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть многопоточное приложение, написанное на C, которое работает под Debian (Stretch).Одним из потоков является простая консоль, которая поддерживает несколько команд для управления приложением.Обычно это приложение запускается автоматически, когда система загружается и работает в фоновом режиме с отключенным потоком консоли.

Я ищу способ «подключиться» к приложению удаленно, чтобы я мог использовать консоль.Соединение может быть прямым с использованием порта, или я могу просто подключиться к приложению через ssh, а затем подключиться к приложению.

Во время разработки я просто запускаю приложение в интерактивном режиме, но хотел бы, чтобы после его запуска была отлажена опция.

Я думал, что что-то вроде netcat может работать, но похоже, что он использует порты TCP / IP, тогда как поток консоли просто подключается к stdin / stdout.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 21 ноября 2018

Узнайте больше о программировании на Linux, возможно, о старой книге ALP (расширенное программирование под Linux) (свободно скачивается ) или о чем-то более новом.Смотрите также список syscalls (2) .Вы хотите межпроцессное взаимодействие .

Вам нужно узнать больше о сокетах .Смотрите розетки (7) ;вы можете использовать Unix-сокеты, см. unix (7) (или использовать fifo (7) , pipe (7) и т. д. ...) или даже TCP/ IP-сокеты, см. tcp (7) (но тогда остерегайтесь враждебных соединений из Интернета).Вам необходимо использовать системный вызов мультиплексирования , например poll (2) .В простых случаях ваш пользователь может просто использовать telnet для подключения к вашему приложению (будьте осторожны, шифрование не требуется; вам нужно доверять соединению, например, подключиться к какой-либо внутренней локальной сети).

Вы можете решить добавить некоторый веб-интерфейс в вашу программу (который затем станет специализированным веб-сервером, например, обслуживающим несколько http://localhost:12345/ и аналогичных URL-адресов).Затем используйте библиотеку HTTP server , например, libonion или libhttp .Конечно, это требует знакомства с веб-технологиями ( HTTP , HTML5 & CSS , возможно JavaScript и AJAX ),Затем ваш пользователь будет использовать свой браузер для запроса состояния вашего приложения (или, возможно, взаимодействовать с ним) или использовать какую-либо HTTP-команду клиента, например curl .Я рекомендую этот маршрут, но он требует некоторой работы и знакомства с веб-методами.

Вам также может быть интересна библиотека libssh .

Вы можете решить, что вашприложение становится сервисом и связывает его с systemd .

PS.Вы должны посвятить несколько дней чтению материала перед кодированием.

...