aboutsummaryrefslogtreecommitdiffstats
path: root/csci4061/110920_breakout/sol2.c
diff options
context:
space:
mode:
Diffstat (limited to 'csci4061/110920_breakout/sol2.c')
-rw-r--r--csci4061/110920_breakout/sol2.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/csci4061/110920_breakout/sol2.c b/csci4061/110920_breakout/sol2.c
new file mode 100644
index 0000000..b5c4895
--- /dev/null
+++ b/csci4061/110920_breakout/sol2.c
@@ -0,0 +1,52 @@
+/*
+* Recitation Section Number: 9
+* Breakout Number:
+* Member Name (X500)
+* Member Name (X500)
+* Member Name (X500)
+* Member Name (X500)
+*/
+
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <time.h>
+
+// Remember the usage of sig_atomic_t in the recitation example
+static volatile sig_atomic_t doneflag = 0;
+
+static void setdoneflag(int signo) {
+ doneflag = doneflag ^ 1;
+}
+
+void infinitePrint() {
+
+ static int count = 0;
+ printf("%ld: Count = %d\n", time(NULL), ++count);
+ sleep(1);
+}
+
+int main() {
+
+ // ------------------sol2.c-----------------
+ // setup signal handler - sigaction struct, sigemptyset,
+ struct sigaction act;
+ sigset_t sigset;
+ // specify action associated with SIGNT - sigaction()
+ act.sa_handler = setdoneflag; /* set up signal handler */
+ act.sa_flags = 0;
+ if ((sigemptyset(&act.sa_mask) == -1) ||
+ (sigaction(SIGINT, &act, NULL) == -1))
+ {
+ perror("Failed to set SIGINT handler");
+ return 1;
+ }
+ // You are free to modify the while loop but not the infinitePrint()
+ // -----------------------------------------
+
+ /* Print infinitely. */
+ while (1) {
+ if (!doneflag)
+ infinitePrint();
+ }
+} \ No newline at end of file