libdaemon  0.14
dfork.h File Reference

Contains an API for doing a daemonizing fork(). More...

#include <sys/types.h>

Go to the source code of this file.

Macros

#define DAEMON_CLOSE_ALL_AVAILABLE   1
 This variable is defined to 1 iff daemon_close_all() and daemon_close_allv() are supported.
#define DAEMON_UNBLOCK_SIGS_AVAILABLE   1
 This variable is defined to 1 iff daemon_unblock_sigs() and daemon_unblock_sigsv() are supported.
#define DAEMON_RESET_SIGS_AVAILABLE   1
 This variable is defined to 1 iff daemon_reset_sigs() and daemon_reset_sigsv() are supported.

Functions

pid_t daemon_fork (void)
 Does a daemonizing fork().
int daemon_retval_init (void)
 Allocate and initialize resources required by the daemon_retval_xxx() functions.
void daemon_retval_done (void)
 Frees the resources allocated by daemon_retval_init().
int daemon_retval_wait (int timeout)
 Return the value sent by the child via the daemon_retval_send() function, but wait only the specified number of seconds before timing out and returning a negative number.
int daemon_retval_send (int s)
 Send the specified integer to the parent process.
int daemon_close_all (int except_fd,...)
 Close all file descriptors except those passed.
int daemon_close_allv (const int except_fds[])
 Same as daemon_close_all but takes an array of fds, terminated by -1.
int daemon_unblock_sigs (int except,...)
 Unblock all signals except those passed.
int daemon_unblock_sigsv (const int except[])
 Same as daemon_unblock_sigs() but takes an array of signals, terminated by -1.
int daemon_reset_sigs (int except,...)
 Reset all signal handlers except those passed.
int daemon_reset_sigsv (const int except[])
 Same as daemon_reset_sigs() but takes an array of signals, terminated by -1.

Detailed Description

Contains an API for doing a daemonizing fork().

You may daemonize by calling daemon_fork(), a function similar to the plain fork(). If you want to return a return value of the initialization procedure of the child from the parent, you may use the daemon_retval_xxx() functions.

Definition in file dfork.h.

Macro Definition Documentation

#define DAEMON_CLOSE_ALL_AVAILABLE   1

This variable is defined to 1 iff daemon_close_all() and daemon_close_allv() are supported.

Since
0.11
See Also
daemon_close_all(), daemon_close_allv()

Definition at line 106 of file dfork.h.

#define DAEMON_RESET_SIGS_AVAILABLE   1

This variable is defined to 1 iff daemon_reset_sigs() and daemon_reset_sigsv() are supported.

Since
0.13
See Also
daemon_reset_sigs(), daemon_reset_sigsv()

Definition at line 142 of file dfork.h.

#define DAEMON_UNBLOCK_SIGS_AVAILABLE   1

This variable is defined to 1 iff daemon_unblock_sigs() and daemon_unblock_sigsv() are supported.

Since
0.13
See Also
daemon_unblock_sigs(), daemon_unblock_sigsv()

Definition at line 124 of file dfork.h.

Function Documentation

int daemon_close_all ( int  except_fd,
  ... 
)

Close all file descriptors except those passed.

List needs to be terminated by -1. FDs 0, 1, 2 will be kept open anyway.

Since
0.11
See Also
DAEMON_CLOSE_ALL_AVAILABLE
Examples:
testd.c.
int daemon_close_allv ( const int  except_fds[])

Same as daemon_close_all but takes an array of fds, terminated by -1.

Since
0.11
See Also
DAEMON_CLOSE_ALL_AVAILABLE
pid_t daemon_fork ( void  )

Does a daemonizing fork().

For the new daemon process STDIN, STDOUT, STDERR are connected to /dev/null, the process is a session leader, the current directory is changed to /, the umask is set to 777.

Returns
On success, the PID of the child process is returned in the parent's thread of execution, and a 0 is returned in the child's thread of execution. On failure, -1 will be returned in the parent's context, no child process will be created, and errno will be set appropriately.
Examples:
testd.c.
int daemon_reset_sigs ( int  except,
  ... 
)

Reset all signal handlers except those passed.

List needs to be terminated by -1.

Since
0.13
See Also
DAEMON_RESET_SIGS_AVAILABLE
Examples:
testd.c.
int daemon_reset_sigsv ( const int  except[])

Same as daemon_reset_sigs() but takes an array of signals, terminated by -1.

Since
0.13
See Also
DAEMON_RESET_SIGS_AVAILABLE
void daemon_retval_done ( void  )

Frees the resources allocated by daemon_retval_init().

This should be called if neither daemon_retval_wait() nor daemon_retval_send() is called in the current process. The resources allocated by daemon_retval_init() should be freed in both parent and daemon process. This may be achieved by using daemon_retval_wait() resp. daemon_retval_send(), or by using daemon_retval_done().

Examples:
testd.c.
int daemon_retval_init ( void  )

Allocate and initialize resources required by the daemon_retval_xxx() functions.

These functions allow the child to send a value to the parent after completing its initialisation. Call this in the parent before forking.

Returns
zero on success, nonzero on failure.
Examples:
testd.c.
int daemon_retval_send ( int  s)

Send the specified integer to the parent process.

Do not send -1 because this signifies a library error. Should be called just once from the daemon process only. A subsequent call to daemon_retval_done() in the daemon is ignored.

Parameters
sThe integer to pass to daemon_retval_wait() in the parent process
Returns
Zero on success, nonzero on failure.
Examples:
testd.c.
int daemon_retval_wait ( int  timeout)

Return the value sent by the child via the daemon_retval_send() function, but wait only the specified number of seconds before timing out and returning a negative number.

Should be called just once from the parent process only. A subsequent call to daemon_retval_done() in the parent is ignored.

Parameters
timeoutThetimeout in seconds
Returns
The integer passed daemon_retval_send() in the daemon process, or -1 on failure.
Examples:
testd.c.
int daemon_unblock_sigs ( int  except,
  ... 
)

Unblock all signals except those passed.

List needs to be terminated by -1.

Since
0.13
See Also
DAEMON_UNBLOCK_SIGS_AVAILABLE
Examples:
testd.c.
int daemon_unblock_sigsv ( const int  except[])

Same as daemon_unblock_sigs() but takes an array of signals, terminated by -1.

Since
0.13
See Also
DAEMON_UNBLOCK_SIGS_AVAILABLE