Added signal handlers for all processes.
authorRafał Długołęcki <rafal@dlugolecki.net.pl>
Fri, 20 Jun 2014 23:33:38 +0000 (01:33 +0200)
committerRafał Długołęcki <rafal@dlugolecki.net.pl>
Fri, 20 Jun 2014 23:33:38 +0000 (01:33 +0200)
src/process1.c
src/process2.c
src/process3.c

index d514b03e38daa000c379cc21e9c43212576eb2c6..b5004830f5c9c43e4aebc60df07a0cf1828e83ea 100644 (file)
@@ -5,9 +5,31 @@
 /* open/read/write/close */
 #include <fcntl.h>
 
+/* Signals handling.. */
+#include <signal.h>
+
 /** If buffer is too small to hold entire string, it is incremented by this value */
 #define BUFFER_STEP 16
 
+/**
+ * Handler for signals.
+ */
+void sig_handler(int signo)
+{
+       if (signo == SIGUSR1) {
+               fprintf(stderr, "[%s] SIGUSR1!\n", "process1");
+       }
+       else if (signo == SIGUSR2) {
+               fprintf(stderr, "[%s] SIGUSR2!\n", "process1");
+       }
+       else if (signo == SIGINT) {
+               fprintf(stderr, "[%s] SIGINT!\n", "process1");
+       }
+       else if (signo == SIGCONT) {
+               fprintf(stderr, "[%s] SIGCONT!\n", "process1");
+       }
+}
+
 /**
  * Program reads entire lines of text from the standard input and pass them
  * to the process2 using created pipe.
@@ -37,12 +59,28 @@ int main(void) {
        /** File descriptor of pipe */
        int file_descriptor;
 
+       fprintf(stderr, "[%s] Init!\n", "process1");
+
+       /**
+        * Register signals handled by process
+        */
+       if (signal(SIGUSR1, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR1\n");
+       }
+       if (signal(SIGUSR2, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR2\n");
+       }
+       if (signal(SIGINT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGINT\n");
+       }
+       if (signal(SIGCONT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGCONT\n");
+       }
+
        mkfifo(write_pipe, 0666);
 
        file_descriptor = open(write_pipe, O_WRONLY);
 
-       fprintf(stderr, "[%s] Init!\n", "process1");
-
        do {
                c = fgetc(stdin);
 
index b6dff4b8d2fa0703405cf9ee49e97793ee01d5e3..7ae70ffc4a056bfd4dfaaa21278c3537f89438ba 100644 (file)
@@ -3,9 +3,31 @@
 /* open/read/write/close */
 #include <fcntl.h>
 
+/* Signals handling.. */
+#include <signal.h>
+
 /** If buffer is too small to hold entire string, it is incremented by this value */
 #define BUFFER_STEP 16
 
+/**
+ * Handler for signals.
+ */
+void sig_handler(int signo)
+{
+       if (signo == SIGUSR1) {
+               fprintf(stderr, "[%s] SIGUSR1!\n", "process1");
+       }
+       else if (signo == SIGUSR2) {
+               fprintf(stderr, "[%s] SIGUSR2!\n", "process1");
+       }
+       else if (signo == SIGINT) {
+               fprintf(stderr, "[%s] SIGINT!\n", "process1");
+       }
+       else if (signo == SIGCONT) {
+               fprintf(stderr, "[%s] SIGCONT!\n", "process1");
+       }
+}
+
 /**
  * Program grabs data from process1, calculates number of characters in each line
  * and pass the value to process3.
@@ -48,6 +70,22 @@ int main(void) {
 
        fprintf(stderr, "[%s] Init!\n", "process2");
 
+       /**
+        * Register signals handled by process
+        */
+       if (signal(SIGUSR1, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR1\n");
+       }
+       if (signal(SIGUSR2, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR2\n");
+       }
+       if (signal(SIGINT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGINT\n");
+       }
+       if (signal(SIGCONT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGCONT\n");
+       }
+
        while(1) {
                /* Read data from input pipe */
                count = read(read_descriptor, buffer, BUFFER_STEP);
index 4568d97d1e3c4ee1280221fbf7f23ef1cd7f57e2..8b4f8264f39a3621f6dc0f267b6f53e8339e0f63 100644 (file)
@@ -3,6 +3,28 @@
 /* open/read/write/close */
 #include <fcntl.h>
 
+/* Signals handling.. */
+#include <signal.h>
+
+/**
+ * Handler for signals.
+ */
+void sig_handler(int signo)
+{
+       if (signo == SIGUSR1) {
+               fprintf(stderr, "[%s] SIGUSR1!\n", "process1");
+       }
+       else if (signo == SIGUSR2) {
+               fprintf(stderr, "[%s] SIGUSR2!\n", "process1");
+       }
+       else if (signo == SIGINT) {
+               fprintf(stderr, "[%s] SIGINT!\n", "process1");
+       }
+       else if (signo == SIGCONT) {
+               fprintf(stderr, "[%s] SIGCONT!\n", "process1");
+       }
+}
+
 /**
  * Program grabs data (calculated number of characters) from process2 and prints
  * grabbed data to the standard output.
@@ -20,11 +42,27 @@ int main(void) {
        /** Stores number of bytes read from input pipe in current iteration */
        ssize_t count = 0;
 
+       fprintf(stderr, "[%s] Init!\n", "process3");
+
+       /**
+        * Register signals handled by process
+        */
+       if (signal(SIGUSR1, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR1\n");
+       }
+       if (signal(SIGUSR2, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGUSR2\n");
+       }
+       if (signal(SIGINT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGINT\n");
+       }
+       if (signal(SIGCONT, sig_handler) == SIG_ERR) {
+               fprintf(stderr, "can't catch SIGCONT\n");
+       }
+
        /* Reading from process2 */
        read_descriptor = open(read_pipe, O_RDONLY);
 
-       fprintf(stderr, "[%s] Init!\n", "process3");
-
        while(1) {
                /* Read data from input pipe */
                count = read(read_descriptor, &buffer, sizeof(int));