diff options
author | José Bollo <jose.bollo@iot.bzh> | 2018-10-11 17:37:02 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-10-12 14:33:44 +0200 |
commit | deaf20980bcacd8731e9228c86f528ac480c7f55 (patch) | |
tree | c06032da1cb75f739418fdfc7943e31b81af4ea8 | |
parent | 86e4c175b0c35d38c8a214ae1c6afce6ad6aac4c (diff) |
APIv3: Allow to write application binding
This enable a binding version 3 to declare
no API. This is used to start a job that will
will run after initialisation.
The tutorial tuto-app1 shows how. Run it with:
afb-daemon --binding tuto-app1.so
A further option could be add to close stdin
even if running in foreground, as it was the
case before.
Change-Id: I2b384d125accb4642eed8e004642ba959326878f
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r-- | bindings/tutorial/CMakeLists.txt | 2 | ||||
-rw-r--r-- | bindings/tutorial/tuto-app1.c | 30 | ||||
-rw-r--r-- | src/main-afb-daemon.c | 9 |
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 */ } /*--------------------------------------------------------- |