0ba1c5115630ae36523a43854065091692cefab8
[platform/upstream/bash.git] / builtins / psize.c
1 /* psize.c - Find pipe size. */
2
3 /* Copyright (C) 1987, 1991 Free Software Foundation, Inc.
4
5    This file is part of GNU Bash, the Bourne Again SHell.
6
7    Bash is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 1, or (at your option)
10    any later version.
11
12    Bash is distributed in the hope that it will be useful, but WITHOUT
13    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15    License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with Bash; see the file COPYING.  If not, write to the Free
19    Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21 /*  Write output in 128-byte chunks until we get a sigpipe or write gets an
22     EPIPE.  Then report how many bytes we wrote.  We assume that this is the
23     pipe size. */
24 #include <config.h>
25
26 #if defined (HAVE_UNISTD_H)
27 #  include <unistd.h>
28 #endif
29
30 #include <stdio.h>
31 #include <sys/types.h>
32 #include <signal.h>
33 #include <errno.h>
34
35 #include "../command.h"
36 #include "../general.h"
37 #include "../sig.h"
38 extern int errno;
39
40 int nw;
41
42 sighandler
43 sigpipe (sig)
44      int sig;
45 {
46   fprintf (stderr, "%d\n", nw);
47   exit (0);
48 }
49
50 main (argc, argv)
51      int argc;
52      char **argv;
53 {
54   char buf[128];
55   register int i;
56
57   for (i = 0; i < 128; i++)
58     buf[i] = ' ';
59
60   signal (SIGPIPE, sigpipe);
61
62   nw = 0;
63   for (;;)
64     {
65       int n;
66       n = write (1, buf, 128);
67       nw += n;
68     }
69 }