diff options
| author | Carson Fleming <cflems@cflems.net> | 2020-10-20 01:26:37 +0200 |
|---|---|---|
| committer | Carson Fleming <cflems@cflems.net> | 2020-10-20 01:26:37 +0200 |
| commit | 4251f289e803d5d35f8d160545eb281387723ca5 (patch) | |
| tree | b5d338bb3ff12e1eb5ef64e39670b17104064806 /daemonize.c | |
| parent | 72088b904c8ce58b0470843e471f7c8c97861ac9 (diff) | |
| download | daemonize-4251f289e803d5d35f8d160545eb281387723ca5.tar.gz | |
Finished up logging options
Diffstat (limited to 'daemonize.c')
| -rw-r--r-- | daemonize.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/daemonize.c b/daemonize.c index c9c925f..5cee18d 100644 --- a/daemonize.c +++ b/daemonize.c @@ -5,6 +5,7 @@ #include <ctype.h> #include <string.h> #include <stdbool.h> +#include <fcntl.h> const struct option longopts[] = { {"chdir", no_argument, NULL, 'd'}, @@ -102,14 +103,26 @@ int main (int argc, char** argv) { // Set up logs as appropriate int logs = options.stdlog || options.errlog; if (options.stdlog) { - dup2(fileno(options.stdlog), fileno(stdout)); + dup2(fileno(options.stdlog), STDOUT_FILENO); fclose(options.stdlog); } if (options.errlog) { - dup2(fileno(options.errlog), fileno(stderr)); + dup2(fileno(options.errlog), STDERR_FILENO); fclose(options.errlog); } - // TODO: close stdin, stderr, stdout and redirect to /dev/null if logging + + if (logs && !options.noclose) { + int devnull_out = open("/dev/null", O_WRONLY); + int devnull_in = open("/dev/null", O_RDONLY); + if (!options.errlog) + dup2(devnull_out, STDERR_FILENO); + if (!options.stdlog) + dup2(devnull_out, STDOUT_FILENO); + dup2(devnull_in, STDIN_FILENO); + close(devnull_in); + close(devnull_out); + } + daemon(options.nochdir, options.noclose | logs); system(buffer); } |
