X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fdaemon.h;h=38ec3ad1a36858d9cfc0185ba6f39a37dbbecb92;hb=6d7d2ace1494936d11b8cabcec26c7e4d0fdda68;hp=14436f311eeb9da7783da837517e235d9224df83;hpb=4816a18f33380a33d381b77d41df39113c94500d;p=sliver-openvswitch.git diff --git a/lib/daemon.h b/lib/daemon.h index 14436f311..38ec3ad1a 100644 --- a/lib/daemon.h +++ b/lib/daemon.h @@ -21,6 +21,22 @@ #include #include +/* This file provides an interface for utilities to run in the background + * as daemons on POSIX platforms like Linux or as services on Windows platform. + * Some of the functionalities defined in this file are only applicable to + * POSIX platforms and some are applicable only on Windows. As such, the + * function definitions unique to each platform are separated out with + * ifdef macros. More descriptive comments on individual functions are provided + * in daemon.c (for Linux) and daemon-windows.c (for Windows). + + * The DAEMON_OPTION_ENUMS, DAEMON_LONG_OPTIONS and DAEMON_OPTION_HANDLERS + * macros are useful for parsing command-line options in individual utilities. + * For e.g., the command-line option "--detach" is recognized on Linux + * and results in calling the set_detach() function. The same option is not + * recognized on Windows platform. + */ + +#ifndef _WIN32 #define DAEMON_OPTION_ENUMS \ OPT_DETACH, \ OPT_NO_CHDIR, \ @@ -56,26 +72,39 @@ daemon_set_monitor(); \ break; -char *make_pidfile_name(const char *name); +void set_detach(void); +void daemon_set_monitor(void); void set_pidfile(const char *name); -const char *get_pidfile(void); void set_no_chdir(void); -bool is_chdir_enabled(void); -void set_detach(void); +void ignore_existing_pidfile(void); +pid_t read_pidfile(const char *name); +#else +#define DAEMON_OPTION_ENUMS \ + OPT_SERVICE, \ + OPT_SERVICE_MONITOR + +#define DAEMON_LONG_OPTIONS \ + {"service", no_argument, NULL, OPT_SERVICE}, \ + {"service-monitor", no_argument, NULL, OPT_SERVICE_MONITOR} + +#define DAEMON_OPTION_HANDLERS \ + case OPT_SERVICE: \ + break; \ + \ + case OPT_SERVICE_MONITOR: \ + break; + +void control_handler(DWORD request); +#endif /* _WIN32 */ + bool get_detach(void); -void daemon_set_monitor(void); void daemon_save_fd(int fd); -void remove_pidfile_from_unlink(void); -void add_pidfile_to_unlink(void); void daemonize(void); void daemonize_start(void); void daemonize_complete(void); -void ignore_existing_pidfile(void); void daemon_usage(void); -pid_t read_pidfile(const char *name); -pid_t read_pidfile_if_exists(const char *name); - -pid_t fork_and_clean_up(void); -void daemonize_post_detach(void); +void service_start(int *argcp, char **argvp[]); +void service_stop(void); +bool should_service_stop(void); #endif /* daemon.h */