#ifndef DAEMON_H
#define DAEMON_H 1
+#include <limits.h>
#include <stdbool.h>
#include <sys/types.h>
-#define DAEMON_LONG_OPTIONS \
- {"detach", no_argument, 0, 'D'}, \
- {"force", no_argument, 0, 'f'}, \
- {"pidfile", optional_argument, 0, 'P'}
+enum {
+ OPT_DETACH = UCHAR_MAX + 2048,
+ OPT_NO_CHDIR,
+ OPT_OVERWRITE_PIDFILE,
+ OPT_PIDFILE,
+};
+
+#define DAEMON_LONG_OPTIONS \
+ {"detach", no_argument, 0, OPT_DETACH}, \
+ {"no-chdir", no_argument, 0, OPT_NO_CHDIR}, \
+ {"pidfile", optional_argument, 0, OPT_PIDFILE}, \
+ {"overwrite-pidfile", no_argument, 0, OPT_OVERWRITE_PIDFILE}
#define DAEMON_OPTION_HANDLERS \
- case 'D': \
+ case OPT_DETACH: \
set_detach(); \
break; \
\
- case 'P': \
+ case OPT_NO_CHDIR: \
+ set_no_chdir(); \
+ break; \
+ \
+ case OPT_PIDFILE: \
set_pidfile(optarg); \
break; \
\
- case 'f': \
+ case OPT_OVERWRITE_PIDFILE: \
ignore_existing_pidfile(); \
break;
char *make_pidfile_name(const char *name);
void set_pidfile(const char *name);
const char *get_pidfile(void);
+void set_no_chdir(void);
void set_detach(void);
void daemonize(void);
void die_if_already_running(void);