Взаимодействие с приложением во время его работы в C - PullRequest
3 голосов
/ 18 мая 2011

Я давно ищу ответ на этот вопрос.Я написал небольшой, легкий сервер, и он действительно отлично работает.Там нет проблем;Тем не менее, есть некоторые вещи, которые я хотел бы сделать с приложением, пока оно действительно работает.Например: server stop, чтобы явно остановить сервер.

Возможно, мне стоит подумать о создании демона для моего сервера?Платформа, на которой он работает, - Linux, и я не собираюсь переносить ее на платформы, отличные от POSIX, поэтому Windows здесь не имеет отношения.

Но да, чтобы подвести итог моего вопроса: как сделатьприложение получает «аргументы» или «задачи» извне (такие как командная строка или другое приложение)

Заранее приветствует, так как я знаю, что StackOverflow всегда готов с твердым, быстрым ответом,

/ Джесси

Ответы [ 4 ]

3 голосов
/ 18 мая 2011

Есть множество вариантов.Одним из популярных решений является использование сигналов в стиле POSIX.По сути, вы устанавливаете обработчик сигналов и реагируете на сигналы.

Если это слишком упрощенно (например, вам нужно принимать параметры), вы также можете позволить своему демону открыть сокет, в котором он слушает команды.Затем вы пишете небольшую вспомогательную программу для отправки команд в сокет.Вы также можете сделать нечто подобное, используя именованный канал.

В основном то, что вы ищете, называется Межпроцессное взаимодействие (IPC).Страница Википедии может указать вам правильное направление.

1 голос
/ 18 мая 2011

Некоторые ответы, от простого к сложному:

  • Используйте обработчики сигналов (3).Значит для этого нужно что-то сделать.Команда kill (1) будет передавать сигнал извне.
  • Контролировать файл на наличие изменений и проверять, что там, делать что-то в зависимости от того, что там
  • Использовать протокол IPCэто позволяет другим приложениям общаться с вами.Широкая тема, широко обсуждаемая в Интернете.
  • Создание архитектуры клиент / сервер, в которой команды могут отправляться через TCP / UDP.
1 голос
/ 18 мая 2011

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

kill -SIGUSR1 $pid

где $pid pid вашего работающего сервера. Ограничением метода сигнала является то, что не существует прямого способа отправить любую другую информацию вместе с сигналом. Однако косвенно сервер может воздействовать на сигнал путем перезагрузки файла конфигурации, например.

Для более сложного управления другой способ управления работающим сервером - это встроить в него простой веб-сервер. Если вы настроите этот веб-сервер для прослушивания, например, на порту 8080, вы сможете поговорить с ним, перейдя на

http://localhost:8080/

в вашем браузере. Этот метод предоставляет почти бесконечное количество возможностей для мониторинга и контроля.

1 голос
/ 18 мая 2011

Вас может заинтересовать Обработка сигналов , который является распространенным методом, который приложения, такие как веб-сервер Apache, используют для обработки таких запросов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...