summaryrefslogtreecommitdiff
path: root/daemonize.c
diff options
context:
space:
mode:
authorCarson Fleming <carsonf@syapse.com>2017-07-14 13:32:24 -0700
committerCarson Fleming <carsonf@syapse.com>2017-07-14 13:32:24 -0700
commit43c4a4ee5edf57720cad9dc6a93abd4a0c3d2978 (patch)
treed5ded473658f84c57df45f0cb5d9811f7a2f2704 /daemonize.c
parent8219dc32ee8983022a0f8212bb3df9546cbb99ff (diff)
downloaddaemonize-43c4a4ee5edf57720cad9dc6a93abd4a0c3d2978.tar.gz
Created daemonize
Diffstat (limited to 'daemonize.c')
-rw-r--r--daemonize.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/daemonize.c b/daemonize.c
new file mode 100644
index 0000000..ab231c5
--- /dev/null
+++ b/daemonize.c
@@ -0,0 +1,47 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+
+void q (char* m) {
+ fprintf(stderr, "%s\n", m);
+ exit(1);
+}
+
+char* lowerdup (char* a) {
+ char* b = strdup(a);
+ int i;
+ for (i = 0; b[i] != 0; i++) {
+ b[i] = tolower(b[i]);
+ }
+ return b;
+}
+
+int main (int argc, char** argv) {
+ if (argc < 2) q("[daemonize] Too few arguments.\nUsage: daemonize [--chdir] [--noclose] <command>");
+ int i, cmdlen = 0, buff_size = 256, nochdir = 1, noclose = 0;
+ char* buffer = malloc(buff_size);
+
+ for (i = 1; i < argc; i++) {
+ char* cmp = lowerdup(argv[i]);
+ if (strcmp(cmp, "--chdir") == 0) nochdir = 0;
+ else if (strcmp(cmp, "--noclose") == 0) noclose = 1;
+ else {
+ int arglen = strlen(argv[i]);
+ if (cmdlen+arglen+1 > buff_size) {
+ buff_size *= 2;
+ buffer = realloc(buffer, buff_size);
+ if (buffer == NULL) q("[daemonize] Out of memory parsing arguments.");
+ }
+ strncpy(&buffer[cmdlen], argv[i], arglen);
+ cmdlen += arglen+1;
+ buffer[cmdlen-1] = ' ';
+ }
+ free(cmp);
+ }
+ buffer[cmdlen-1] = 0;
+
+ daemon(nochdir, noclose);
+ system(buffer);
+}