LINUX.ORG.RU

Посоветуйте дизайн


0

0

Добрый день!

Помогите пожалуйста советом.
Я имею крайне небольшой опыт в программировании под Linux.

Требуется написать backup-модуль (с++) который может принимать 3 команды с некоторыми параметрами:
- создать резервную копию
- восстановить данные
- выдать информацию о текущем состоянии модуля. (mode: backup; 25% done)

пользовательский интерфейс задуман такой:
кто-то запускает модуль с командой backup, программа демонизируется и начинает копировать файлы и т. д.
Хотелось, чтобы для получения статусной информации достаточно было бы вызвать этот модуль еще раз с параметром status.
Как это можно реализовать? Похоже, что в рамках одного модуля это не удастся.
Может тогда надо разбить реализацию на 2 компонента -- на собственно демона и клиента, передающего команды демону?

Что посоветуете?


Сохрани pid в файлик, при запуске софтины проверяй его наличие - ежели он есть, то посылай демону сигнал типа SIGUSR* какой-нибудь, по коему будет выдана нужная инфа. А чтобы голову не морочить - слей, поставь и забудь о проблеме: http://www.amanda.org.

Gharik
()
Ответ на: комментарий от Gharik

Собственно бинарник может быть и один, глянь как в 'dd' (GNU coreutils) сделано.

Gharik
()
Ответ на: комментарий от j262

2 Gharik:
Я тоже думал на счет SIGUSR, но не был уверен, что эту технику применяют для задачи, подобной моей. В одной книге написано, что следует избегать операций ввода-вывода и вызовов большинства библиотечных и системных функций в обработчиках сигналов. Поэтому наверное надо в обработчике регистрировать сигнал, а в отдельном потоке в цикле постоянно проверять его наличие.
Вариант с Амандой не подходит, потому что у меня специфические данные и стратегии сохранения-восстановления.

2 j262:
Вы наверное не совсем поняли вопрос. Меня интересует получение информации о внутреннем состоянии работающего процесса. А разбор параметров командной строки -- да, удобно делать с помощью семейства функций getopt.

efix
() автор топика
Ответ на: комментарий от efix

Вообще по уму, конечно, грамотнее делать общение через сокет, но для случая, когда команд 1-2 (SIGUSR1+SIGUSR2) - не знаю, не знаю...

Gharik
()
Ответ на: комментарий от efix

Ну и делай через сигналы, считай что болванка в виде dd.c уже есть, осталось алгоритмы классом оформить (не силен я в c++) и погонять на предмет отладки.

Gharik
()

раз уж процессы на одноом хосте крутятся - то предлагаю подумать и рассмотреть варианты с временными файлами и "шеред мемори"

ale ★★
()

через сигналы в легкую.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.