summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bindings/tutorial/CMakeLists.txt2
-rw-r--r--bindings/tutorial/tuto-app1.c30
-rw-r--r--src/main-afb-daemon.c9
3 files changed, 38 insertions, 3 deletions
diff --git a/bindings/tutorial/CMakeLists.txt b/bindings/tutorial/CMakeLists.txt
index 2860c8c9..5c19bb85 100644
--- a/bindings/tutorial/CMakeLists.txt
+++ b/bindings/tutorial/CMakeLists.txt
@@ -32,3 +32,5 @@ ENDMACRO(tuto)
tuto(1 c)
tuto(2 c)
tuto(3 cpp)
+
+tuto(app1 c)
diff --git a/bindings/tutorial/tuto-app1.c b/bindings/tutorial/tuto-app1.c
new file mode 100644
index 00000000..93747cdd
--- /dev/null
+++ b/bindings/tutorial/tuto-app1.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+
+#define AFB_BINDING_VERSION 3
+#include <afb/afb-binding.h>
+
+static int appmain(void *arg)
+{
+ const char *name = arg;
+ char buffer[50];
+
+ AFB_API_NOTICE(afbBindingV3root, "Entering Application main");
+ printf("Hello, I'm %s!\n", name);
+ printf("What's your name? ");
+ scanf("%s", buffer);
+ printf("Hi %s! Nice to meet you. OOOOPS I'm late bye bye\n", buffer);
+ return 0;
+}
+
+static void application(int signum, void *arg)
+{
+ if (signum)
+ exit(127);
+ exit(appmain(arg));
+}
+
+int afbBindingV3entry(struct afb_api_x3 *rootapi)
+{
+ return afb_api_queue_job(rootapi, application, "BOB", NULL, 0);
+}
+
diff --git a/src/main-afb-daemon.c b/src/main-afb-daemon.c
index 77d7ab29..65481c43 100644
--- a/src/main-afb-daemon.c
+++ b/src/main-afb-daemon.c
@@ -215,13 +215,14 @@ static void setup_daemon()
+--------------------------------------------------------- */
static void daemonize()
{
- int fd = 0, daemon;
+ int fd = 0, daemon, nostdin;
const char *output;
pid_t pid;
daemon = 0;
output = NULL;
wrap_json_unpack(main_config, "{s?b s?s}", "daemon", &daemon, "output", &output);
+ nostdin = 0;
if (output) {
fd = open(output, O_WRONLY | O_APPEND | O_CREAT, 0640);
@@ -241,6 +242,8 @@ static void daemonize()
}
if (pid != 0)
_exit(0);
+
+ nostdin = 1;
}
/* closes the input */
@@ -253,8 +256,8 @@ static void daemonize()
close(fd);
}
- /* after that ctrl+C still works */
- close(0);
+ if (nostdin)
+ close(0); /* except if 'daemon', ctrl+C still works after that */
}
/*---------------------------------------------------------