commit 4f0a813ca1407986691f63d7a93dbcd0a55e61af
parent 2277b619be9ae126685b86b7fab694d23be58ccb
Author: Greg Reagle <greg.reagle@umbc.edu>
Date:   Thu, 22 Jan 2015 16:08:25 -0500
tee: -i option ignores SIGINT
Diffstat:
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/tee.1 b/tee.1
@@ -3,7 +3,7 @@
 tee \- duplicate stdin
 .SH SYNOPSIS
 .B tee
-.RB [ \-a ]
+.RB [ \-ai ]
 .RI [ file ...]
 .SH DESCRIPTION
 .B tee
@@ -12,3 +12,6 @@ writes from stdin to stdout, making copies in each file.
 .TP
 .B \-a
 append to each file rather than overwriting.
+.TP
+.B \-i
+ignore SIGINT, i.e. the interrupt from keyboard signal
diff --git a/tee.c b/tee.c
@@ -1,4 +1,5 @@
 /* See LICENSE file for copyright and license details. */
+#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -8,13 +9,13 @@
 static void
 usage(void)
 {
-	eprintf("usage: %s [-a] [file...]\n", argv0);
+	eprintf("usage: %s [-ai] [file...]\n", argv0);
 }
 
 int
 main(int argc, char *argv[])
 {
-	int aflag = 0;
+	int aflag = 0, iflag = 0;
 	char buf[BUFSIZ];
 	int i, nfps;
 	size_t n;
@@ -24,10 +25,15 @@ main(int argc, char *argv[])
 	case 'a':
 		aflag = 1;
 		break;
+	case 'i':
+		iflag = 1;
+		break;
 	default:
 		usage();
 	} ARGEND;
 
+	if (iflag && signal(SIGINT, SIG_IGN) == SIG_ERR)
+		eprintf("signal:");
 	nfps = argc + 1;
 	fps = ecalloc(nfps, sizeof *fps);