aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorMichael Stapelberg <michael@stapelberg.de>2010-12-06 14:47:33 +0100
committerMichael Stapelberg <michael@stapelberg.de>2010-12-06 14:47:33 +0100
commit6762515c8e5861aa80675fe6f27be54689651e76 (patch)
tree73101a65621f7d76998302f80b57b9cdeb1ce9a1 /main.c
parentf15a2fea3612cfecb937847c8c8640949793c918 (diff)
downloadprozesskommunikation-6762515c8e5861aa80675fe6f27be54689651e76.tar.gz
prozesskommunikation-6762515c8e5861aa80675fe6f27be54689651e76.tar.bz2
Grundgerüst in eigenen Ordner verschoben
Diffstat (limited to 'main.c')
-rw-r--r--main.c86
1 files changed, 0 insertions, 86 deletions
diff --git a/main.c b/main.c
deleted file mode 100644
index f876f54..0000000
--- a/main.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * vim:ts=4:sw=4:expandtab
- *
- */
-#include <stdio.h>
-#include <unistd.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "conv.h"
-#include "log.h"
-#include "monitor.h"
-#include "statistic.h"
-
-typedef void (*funcptr)();
-
-pid_t pconv;
-pid_t plog;
-pid_t pstatistic;
-pid_t pmonitor;
-
-/*
- * Signalhandler für SIGTERM. Sendet SIGINT an die 4 Prozesse.
- *
- */
-void sigterm() {
- kill(pconv, SIGINT);
- kill(plog, SIGINT);
- kill(pstatistic, SIGINT);
- kill(pmonitor, SIGINT);
-}
-
-/*
- * fork()t einen neuen Prozess. In diesem Prozess wird die übergebene Funktion
- * work() aufgerufen, außerdem wird der Signalhandler cleanup() installiert für
- * das Signal SIGINT.
- *
- */
-pid_t fork_child(funcptr work, funcptr cleanup) {
- pid_t pid = fork();
- if (pid == 0) {
- /* child process */
- signal(SIGINT, cleanup);
-
- work();
-
- /* Die Prozesse laufen endlos. Daher beenden wir mit Fehlercode, sofern
- * die Prozessfunktion doch zurückkehrt. */
- exit(EXIT_FAILURE);
- }
-
- if (pid == -1) {
- /* error */
- perror("fork()");
- exit(EXIT_FAILURE);
- }
-
- /* parent process */
- printf("forked\n");
- return pid;
-}
-
-/*
- * main-Funktion. Startet die 4 Prozesse, registriert einen signal-handler für
- * SIGTERM (dieser sendet SIGINT an die 4 Prozesse) und wartet schließlich auf
- * das Ende der Prozesse.
- *
- */
-int main() {
- pconv = fork_child(conv, conv_cleanup);
- plog = fork_child(log, log_cleanup);
- pstatistic = fork_child(statistic, statistic_cleanup);
- pmonitor = fork_child(monitor, monitor_cleanup);
-
- signal(SIGTERM, sigterm);
-
- int status;
- waitpid(pconv, &status, 0);
- waitpid(plog, &status, 0);
- waitpid(pstatistic, &status, 0);
- waitpid(pmonitor, &status, 0);
-
- return 0;
-}