summaryrefslogtreecommitdiff
path: root/manual/examples/sigh1.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-02-18 01:27:10 +0000
committerRoland McGrath <roland@gnu.org>1995-02-18 01:27:10 +0000
commit28f540f45bbacd939bfd07f213bcad2bf730b1bf (patch)
tree15f07c4c43d635959c6afee96bde71fb1b3614ee /manual/examples/sigh1.c
downloadglibc-28f540f45bbacd939bfd07f213bcad2bf730b1bf.tar.gz
initial import
Diffstat (limited to 'manual/examples/sigh1.c')
-rw-r--r--manual/examples/sigh1.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/manual/examples/sigh1.c b/manual/examples/sigh1.c
new file mode 100644
index 0000000000..2c6e95b9c9
--- /dev/null
+++ b/manual/examples/sigh1.c
@@ -0,0 +1,36 @@
+#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;
+}