diff options
| -rw-r--r-- | HISTORY | 1 | ||||
| -rw-r--r-- | INSTALL | 4 | ||||
| -rw-r--r-- | vdr.c | 34 | 
3 files changed, 35 insertions, 4 deletions
| @@ -86,3 +86,4 @@ Video Disk Recorder Revision History  - Implemented the "Simple Video Disk Recorder Protocol" (SVDRP) to control    the VDR over a network connection.  - Implemented command line option handling. +- The program can now run in full background mode by using the --daemon option. @@ -45,6 +45,10 @@ port ("Simple Video Disk Recorder Protocol"). By default, it listens  on port 2001 (use the --port=PORT option to change this). For details  about the SVDRP syntax see the source file 'svdrp.c'. +If the program shall run as a daemon, use the --daemon option. This +will completely detach it from the terminal and will continue as a +background process. +  Use "vdr --help" for a list of available command line options.  The video data directory: @@ -22,12 +22,13 @@   *   * The project's page is at http://www.cadsoft.de/people/kls/vdr   * - * $Id: vdr.c 1.22 2000/07/23 14:53:22 kls Exp $ + * $Id: vdr.c 1.23 2000/07/23 15:36:43 kls Exp $   */  #include <getopt.h>  #include <signal.h>  #include <stdlib.h> +#include <unistd.h>  #include "config.h"  #include "dvbapi.h"  #include "interface.h" @@ -58,19 +59,23 @@ int main(int argc, char *argv[])  #define DEFAULTSVDRPPORT 2001    int SVDRPport = DEFAULTSVDRPPORT; +  bool DaemonMode = false;    static struct option long_options[] = { -      { "help", no_argument,       NULL, 'h' }, -      { "port", required_argument, NULL, 'p' }, +      { "daemon", no_argument,       NULL, 'd' }, +      { "help",   no_argument,       NULL, 'h' }, +      { "port",   required_argument, NULL, 'p' },        { 0 }      };    int c;    int option_index = 0; -  while ((c = getopt_long(argc, argv, "hp:", long_options, &option_index)) != -1) { +  while ((c = getopt_long(argc, argv, "dhp:", long_options, &option_index)) != -1) {          switch (c) { +          case 'd': DaemonMode = true; break;            case 'h': printf("Usage: vdr [OPTION]\n\n"                             "  -h,      --help        display this help and exit\n" +                           "  -d,      --daemon      run in daemon mode\n"                             "  -p PORT, --port=PORT   use PORT for SVDRP ('0' turns off SVDRP)\n"                             "\n"                             "Report bugs to <vdr-bugs@cadsoft.de>\n" @@ -91,6 +96,27 @@ int main(int argc, char *argv[])    // Log file:    openlog("vdr", LOG_PID | LOG_CONS, LOG_USER); + +  // Daemon mode: + +  if (DaemonMode) { +#ifndef DEBUG_OSD +     pid_t pid = fork(); +     if (pid < 0) { +        fprintf(stderr, "%s\n", strerror(errno)); +        esyslog(LOG_ERR, strerror(errno)); +        return 1; +        } +     if (pid != 0) +        return 0; // initial program immediately returns +     fclose(stdin); +     fclose(stdout); +     fclose(stderr); +#else +     fprintf(stderr, "vdr: can't run in daemon mode with DEBUG_OSD on!\n"); +     abort(); +#endif +     }    isyslog(LOG_INFO, "started");    // DVB interfaces: | 
