Implemented daemon mode

This commit is contained in:
Klaus Schmidinger 2000-07-23 15:36:43 +02:00
parent 52514313fb
commit 6602eb5c90
3 changed files with 35 additions and 4 deletions

View File

@ -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.

View File

@ -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:

34
vdr.c
View File

@ -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: