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);