about summary refs log tree commit diff
path: root/REORG.TODO/manual/examples/sigh1.c
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/manual/examples/sigh1.c')
-rw-r--r--REORG.TODO/manual/examples/sigh1.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/REORG.TODO/manual/examples/sigh1.c b/REORG.TODO/manual/examples/sigh1.c
new file mode 100644
index 0000000000..6d4a0752f3
--- /dev/null
+++ b/REORG.TODO/manual/examples/sigh1.c
@@ -0,0 +1,53 @@
+/* Signal Handlers that Return
+   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2
+   of the License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* This flag controls termination of the main loop. */
+volatile sig_atomic_t keep_going = 1;
+
+/* The signal handler just clears the flag and re-enables itself. */
+void
+catch_alarm (int sig)
+{
+  keep_going = 0;
+  signal (sig, catch_alarm);
+}
+
+void
+do_stuff (void)
+{
+  puts ("Doing stuff while waiting for alarm....");
+}
+
+int
+main (void)
+{
+  /* Establish a handler for SIGALRM signals. */
+  signal (SIGALRM, catch_alarm);
+
+  /* Set an alarm to go off in a little while. */
+  alarm (2);
+
+  /* Check the flag once in a while to see when to quit. */
+  while (keep_going)
+    do_stuff ();
+
+  return EXIT_SUCCESS;
+}