# libdaemon 0.14

Copyright 2003-2009 Lennart Poettering <mzqnrzba (at) 0pointer (dot) de>

## License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

## News

Sun Oct 18 2009:

Version 0.14 released; changes include: add `daemon_set_verbosity()` call; numerous updates

Tue Jul 29 2008:

Version 0.13 released; changes include: add `daemon_reset_sigs()` and `daemon_unblock_sigs()` calls for resetting signal handlers to sensible states; improve error handling.

Tue Jul 10 2007:

Version 0.12 released; changes include: make `daemon_close_all()` actually work properly.

Fri Jun 22 2007:

Version 0.11 released; changes include: automatically detect whether lynx is installed; properly set `errno` on every error condition; add new function `daemon_close_all()` to close all open file descriptors except a given set; add `daemon_logv()`, which is identical to `daemon_log()`, but takes a `va_list` argument; add `daemon_execv()` in similar style; other fixes

Thu Nov 24 2005:

Version 0.10 released; changes include: make logging compatible with daemons running in a `chroot()` environment

Fri Nov 18 2005:

Version 0.9 released; changes include: portability (FreeBSD, NetBSD, OpenBSD, Darwin, Solaris, Cygwin); some minor header file cleanups; fix access mode of PID files; other cleanups; license change from GPL to LGPL

Sat Jun 4 2005:

Version 0.8 released; changes include: proper PID file locking

Sat Dec 18 2004:

Version 0.7 released; changes include: minor cleanups; C++ compatibility; gcc 2.95 compatiblity

Wed Apr 7 2004:

Version 0.6 released; changes include: backgrounding fixes, minor other stuff

Tue Feb 10 2004:

Version 0.5 released; changes include: signal handling fix, forking fix

Sat Jan 10 2004:

Version 0.4 released; changes include: new module `dexec.c`; added `pkg-config` support.

Mon Oct 20 2003:

Version 0.3 released; changes include: documentation update, build fixes, RPM spec file added, added new function int `daemon_pid_file_kill_wait()`.

Thu July 10 2003:

Version 0.2 released; changes include: ugly umask error fix, documentation update

Mon July 7 2003:

Version 0.1 released

## Overview

`libdaemon` is a lightweight C library that eases the writing of UNIX daemons. It consists of the following parts:

- A wrapper around `fork()` which does the correct daemonization procedure of a process
- A wrapper around `syslog()` for simpler and compatible log output to Syslog or STDERR
- An API for writing PID files
- An API for serializing UNIX signals into a pipe for usage with `select()` or `poll()`
- An API for running subprocesses with STDOUT and STDERR redirected to syslog.

APIs like these are used in most daemon software available. It is not that simple to get it done right and code duplication is not a goal.

`libdaemon` is currently used by `ifplugd`, Avahi, `ivam2`, Nautilus-Share and `aeswepd`.

## Current Status

Version 0.14 is feature complete.

## Documentation

An extensive API reference is available

## Requirements

`libdaemon` was developed and tested on Debian GNU/Linux "testing" from July 2003, it should work on most other Linux distributions (and some Unix versions) since it uses GNU Autoconf and GNU libtool for source code configuration and shared library management.

`libdaemon` is known to work on modern Linux systems, FreeBSD, NetBSD, OpenBSD, Darwin, Solaris and Windows/Cygwin.

## Installation

As this package is made with the GNU autotools you should run `./configure` inside the distribution directory for configuring the source tree. After that you should run `make` for compilation and `make install` (as root) for installation of `libdaemon`.

Please use `gmake` instead of traditional `make` for compilation on non-Linux systems.

## Acknowledgements

Sebastien Estienne, for a lot of portability work.

## Download

The newest release is always available from http://0pointer.de/lennart/projects/libdaemon/

Get `libdaemon`'s development sources from the GIT repository (gitweb):

    git clone git://git.0pointer.de/libdaemon

You may find an up to date Debian package of `libdaemon` on the Debian package repository.

If you want to be notified whenever I release a new version of this software use the subscription feature of Freshmeat.