Line data Source code
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 8 : it under the terms of the GNU General Public License as published by 9 : the Free Software Foundation, either version 3 of the License, or 10 : (at your option) any later version. 11 : 12 : Bash is distributed in the hope that it will be useful, 13 : but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : GNU General Public License for more details. 16 : 17 : You should have received a copy of the GNU General Public License 18 : along with Bash. If not, see <http://www.gnu.org/licenses/>. 19 : */ 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 : # ifdef _MINIX 28 : # include <sys/types.h> 29 : # endif 30 : # include <unistd.h> 31 : #endif 32 : 33 : #include <stdio.h> 34 : #ifndef _MINIX 35 : #include "../bashtypes.h" 36 : #endif 37 : #include <signal.h> 38 : #include <errno.h> 39 : 40 : #include "../command.h" 41 : #include "../general.h" 42 : #include "../sig.h" 43 : 44 : #ifndef errno 45 : extern int errno; 46 : #endif 47 : 48 : int nw; 49 : 50 : sighandler 51 1 : sigpipe (sig) 52 : int sig; 53 : { 54 1 : fprintf (stderr, "%d\n", nw); 55 1 : exit (0); 56 : } 57 : 58 : int 59 1 : main (argc, argv) 60 : int argc; 61 : char **argv; 62 : { 63 1 : char buf[128]; 64 1 : register int i; 65 : 66 129 : for (i = 0; i < 128; i++) 67 128 : buf[i] = ' '; 68 : 69 1 : signal (SIGPIPE, sigpipe); 70 : 71 1 : nw = 0; 72 1025 : for (;;) 73 : { 74 513 : int n; 75 513 : n = write (1, buf, 128); 76 512 : nw += n; 77 : } 78 : return (0); 79 : }