2012-04-29 3 views
2

Я созерцаю создание программы демона для FreeBSD, однако я никогда не делал этого, и по внешнему виду это довольно сложно.Библиотека Daemon для FreeBSD

Есть ли библиотеки, которые я мог бы включить, а затем просто написать то, что характерно для моего демона?

ответ

2

Извините, что разместили этот ответ, а не комментарий. У меня недостаточно репутации, чтобы сделать последнее.

Возможно, вы захотите посмотреть на функцию daemon (3), предусмотренную в libc FreeBSD. Он делает такие вещи, как закрытие стандартных дескрипторов файлов, устанавливает настройки, поэтому SIGHUP не будет иметь эффекта и так далее. Исходный код здесь:

http://svnweb.freebsd.org/base/head/lib/libc/gen/daemon.c?view=markup

Там же человек страница. (Будьте осторожны, есть также программа-обертка, демон (1)). Также обратите внимание, что он не переносимый (хотя он может быть доступен в libbsd, я не уверен).

FreeBSD также предоставляет libutil (опять же, не портативный, я думаю), который, среди прочего, предоставляет функции pidfile _ *() для обработки файлов PID, которые, я полагаю, полезны для написания демона. Есть и другие соображения, но это может помочь вам приступить к работе. Не могу сказать гораздо больше, если у вас нет конкретного вопроса.

+0

Благодарим за внимание, это было очень полезно. Что касается более конкретных вещей - я хочу также отправлять сообщения из терминала или cron, что-то вроде передачи-демона (который, я полагаю, передается с помощью пульта дистанционного управления). – Ibolit

+0

Если вы знаете, что демон и клиентские процессы будут выполняться на одном компьютере, лучшим способом является использование сокета unix-domain. Идея состоит в том, чтобы демон создавал сокет при запуске с каким-то стандартным именем (например, что-то вроде $ {HOME} /. Daemon/socket или, может быть, что-то в/var/run), и клиент ищет этот сокет , Этот материал довольно стандартный: вот быстрый учебник: beej.us/guide/bgipc/output/html/multipage/unixsock.html Передача использует IP-сокеты и имеет некоторую библиотеку RPC, поэтому это немного сложнее. syslogd может быть хорошим местом для поиска примеров. –

+0

(возможно, следовало бы упомянуть, что сокеты unix-домена - это объекты в файловой системе, поэтому они найдены с использованием имени файла, а не URL + порта, как и сокеты IP. Все они управляются с использованием того же интерфейса, хотя сокет (), bind() и т. д.) –

Смежные вопросы