Add an optional daemon mode

master
Mark Hills 2014-10-22 21:21:14 +01:00
parent b53aa73137
commit e1682f4dd6
4 changed files with 51 additions and 5 deletions

12
rx.c
View File

@ -162,9 +162,10 @@ static void usage(FILE *fd)
fprintf(fd, " -c <n> Number of channels (default %d)\n",
DEFAULT_CHANNELS);
fprintf(fd, "\nDisplay parameters:\n");
fprintf(fd, "\nProgram parameters:\n");
fprintf(fd, " -v <n> Verbosity level (default %d)\n",
DEFAULT_VERBOSE);
fprintf(fd, " -D <file> Run as a daemon, writing process ID to the given file\n");
}
int main(int argc, char *argv[])
@ -176,7 +177,8 @@ int main(int argc, char *argv[])
/* command-line options */
const char *device = DEFAULT_DEVICE,
*addr = DEFAULT_ADDR;
*addr = DEFAULT_ADDR,
*pid = NULL;
unsigned int buffer = DEFAULT_BUFFER,
rate = DEFAULT_RATE,
jitter = DEFAULT_JITTER,
@ -216,6 +218,9 @@ int main(int argc, char *argv[])
case 'v':
verbose = atoi(optarg);
break;
case 'D':
pid = optarg;
break;
default:
usage(stderr);
return -1;
@ -244,6 +249,9 @@ int main(int argc, char *argv[])
if (set_alsa_sw(snd) == -1)
return -1;
if (pid)
go_daemon(pid);
go_realtime();
r = run_rx(session, decoder, snd, channels, rate);

29
sched.c
View File

@ -19,6 +19,7 @@
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
#include "sched.h"
@ -49,3 +50,31 @@ int go_realtime(void)
return 0;
}
int go_daemon(const char *pid_file)
{
FILE *f;
if (daemon(0, 0) == -1) {
perror("daemon");
return -1;
}
if (!pid_file)
return 0;
f = fopen(pid_file, "w");
if (!f) {
perror("fopen");
return -1;
}
fprintf(f, "%d", getpid());
if (fclose(f) != 0) {
perror("fclose");
return -1;
}
return 0;
}

View File

@ -21,5 +21,6 @@
#define MISC_H
int go_realtime(void);
int go_daemon(const char *pid_file);
#endif

14
tx.c
View File

@ -149,9 +149,10 @@ static void usage(FILE *fd)
fprintf(fd, " -b <kbps> Bitrate (approx., default %d)\n",
DEFAULT_BITRATE);
fprintf(fd, "\nDisplay parameters:\n");
fprintf(fd, "\nProgram parameters:\n");
fprintf(fd, " -v <n> Verbosity level (default %d)\n",
DEFAULT_VERBOSE);
fprintf(fd, " -D <file> Run as a daemon, writing process ID to the given file\n");
fprintf(fd, "\nAllowed frame sizes (-f) are defined by the Opus codec. For example,\n"
"at 48000Hz the permitted values are 120, 240, 480 or 960.\n");
@ -168,7 +169,8 @@ int main(int argc, char *argv[])
/* command-line options */
const char *device = DEFAULT_DEVICE,
*addr = DEFAULT_ADDR;
*addr = DEFAULT_ADDR,
*pid = NULL;
unsigned int buffer = DEFAULT_BUFFER,
rate = DEFAULT_RATE,
channels = DEFAULT_CHANNELS,
@ -181,7 +183,7 @@ int main(int argc, char *argv[])
for (;;) {
int c;
c = getopt(argc, argv, "b:c:d:f:h:m:p:r:v:");
c = getopt(argc, argv, "b:c:d:f:h:m:p:r:v:D:");
if (c == -1)
break;
@ -213,6 +215,9 @@ int main(int argc, char *argv[])
case 'v':
verbose = atoi(optarg);
break;
case 'D':
pid = optarg;
break;
default:
usage(stderr);
return -1;
@ -249,6 +254,9 @@ int main(int argc, char *argv[])
if (set_alsa_sw(snd) == -1)
return -1;
if (pid)
go_daemon(pid);
go_realtime();
r = run_tx(snd, channels, frame, encoder, bytes_per_frame,
ts_per_frame, session);