1865695bbc89088b9526ea9045410e5afb70a985cplars/* 2865695bbc89088b9526ea9045410e5afb70a985cplars * 3865695bbc89088b9526ea9045410e5afb70a985cplars * Copyright (c) International Business Machines Corp., 2001 4865695bbc89088b9526ea9045410e5afb70a985cplars * 5865695bbc89088b9526ea9045410e5afb70a985cplars * This program is free software; you can redistribute it and/or modify 6865695bbc89088b9526ea9045410e5afb70a985cplars * it under the terms of the GNU General Public License as published by 7865695bbc89088b9526ea9045410e5afb70a985cplars * the Free Software Foundation; either version 2 of the License, or 8865695bbc89088b9526ea9045410e5afb70a985cplars * (at your option) any later version. 9865695bbc89088b9526ea9045410e5afb70a985cplars * 10865695bbc89088b9526ea9045410e5afb70a985cplars * This program is distributed in the hope that it will be useful, 11865695bbc89088b9526ea9045410e5afb70a985cplars * but WITHOUT ANY WARRANTY; without even the implied warranty of 12865695bbc89088b9526ea9045410e5afb70a985cplars * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 13865695bbc89088b9526ea9045410e5afb70a985cplars * the GNU General Public License for more details. 14865695bbc89088b9526ea9045410e5afb70a985cplars * 15865695bbc89088b9526ea9045410e5afb70a985cplars * You should have received a copy of the GNU General Public License 16865695bbc89088b9526ea9045410e5afb70a985cplars * along with this program; if not, write to the Free Software 174548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18865695bbc89088b9526ea9045410e5afb70a985cplars */ 19865695bbc89088b9526ea9045410e5afb70a985cplars 20865695bbc89088b9526ea9045410e5afb70a985cplars/* 21865695bbc89088b9526ea9045410e5afb70a985cplars * NAME 22865695bbc89088b9526ea9045410e5afb70a985cplars * pipe06.c 23865695bbc89088b9526ea9045410e5afb70a985cplars * 24865695bbc89088b9526ea9045410e5afb70a985cplars * DESCRIPTION 25865695bbc89088b9526ea9045410e5afb70a985cplars * Check what happens when the system runs out of pipes. 26865695bbc89088b9526ea9045410e5afb70a985cplars * 27865695bbc89088b9526ea9045410e5afb70a985cplars * ALGORITHM 28865695bbc89088b9526ea9045410e5afb70a985cplars * Issue enough pipe calls to run the system out of pipes. 29865695bbc89088b9526ea9045410e5afb70a985cplars * Check that we get EMFILE. 30865695bbc89088b9526ea9045410e5afb70a985cplars * 31865695bbc89088b9526ea9045410e5afb70a985cplars * USAGE: <for command-line> 32865695bbc89088b9526ea9045410e5afb70a985cplars * pipe06 [-c n] [-e] [-i n] [-I x] [-P x] [-t] 33865695bbc89088b9526ea9045410e5afb70a985cplars * where, -c n : Run n copies concurrently. 34865695bbc89088b9526ea9045410e5afb70a985cplars * -e : Turn on errno logging. 35865695bbc89088b9526ea9045410e5afb70a985cplars * -i n : Execute test n times. 36865695bbc89088b9526ea9045410e5afb70a985cplars * -I x : Execute test for x seconds. 37865695bbc89088b9526ea9045410e5afb70a985cplars * -P x : Pause for x seconds between iterations. 38865695bbc89088b9526ea9045410e5afb70a985cplars * -t : Turn on syscall timing. 39865695bbc89088b9526ea9045410e5afb70a985cplars * 40865695bbc89088b9526ea9045410e5afb70a985cplars * HISTORY 41865695bbc89088b9526ea9045410e5afb70a985cplars * 07/2001 Ported by Wayne Boyer 42865695bbc89088b9526ea9045410e5afb70a985cplars * 43865695bbc89088b9526ea9045410e5afb70a985cplars * RESTRICTIONS 44865695bbc89088b9526ea9045410e5afb70a985cplars * None 45865695bbc89088b9526ea9045410e5afb70a985cplars */ 46865695bbc89088b9526ea9045410e5afb70a985cplars#include <fcntl.h> 47865695bbc89088b9526ea9045410e5afb70a985cplars#include <errno.h> 48865695bbc89088b9526ea9045410e5afb70a985cplars#include "test.h" 49865695bbc89088b9526ea9045410e5afb70a985cplars 50865695bbc89088b9526ea9045410e5afb70a985cplarschar *TCID = "pipe06"; 51865695bbc89088b9526ea9045410e5afb70a985cplarsint TST_TOTAL = 1; 52865695bbc89088b9526ea9045410e5afb70a985cplars 53865695bbc89088b9526ea9045410e5afb70a985cplarsint pipe_ret, pipes[2]; 54865695bbc89088b9526ea9045410e5afb70a985cplarsvoid setup(void); 55865695bbc89088b9526ea9045410e5afb70a985cplarsvoid cleanup(void); 56865695bbc89088b9526ea9045410e5afb70a985cplars 5774948ad801d4aba1c872652580b8b331e41aefcaplarsint main(int ac, char **av) 58865695bbc89088b9526ea9045410e5afb70a985cplars{ 5989af32a63ce8a780ea39337339e14caae244b5a4Cyril Hrubis int lc; 60865695bbc89088b9526ea9045410e5afb70a985cplars 61d6d11d08678aac1ed2c370ea8e42e5f45aea07beCyril Hrubis tst_parse_opts(ac, av, NULL, NULL); 62865695bbc89088b9526ea9045410e5afb70a985cplars 63865695bbc89088b9526ea9045410e5afb70a985cplars setup(); 64865695bbc89088b9526ea9045410e5afb70a985cplars 65865695bbc89088b9526ea9045410e5afb70a985cplars for (lc = 0; TEST_LOOPING(lc); lc++) { 66865695bbc89088b9526ea9045410e5afb70a985cplars 67d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang /* reset tst_count in case we are looping */ 68d59a659cd639ca2780b00049d102acd2a783d585Caspar Zhang tst_count = 0; 69865695bbc89088b9526ea9045410e5afb70a985cplars 70865695bbc89088b9526ea9045410e5afb70a985cplars TEST(pipe(pipes)); 71bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 72865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_RETURN != -1) { 73865695bbc89088b9526ea9045410e5afb70a985cplars tst_resm(TFAIL, "call succeeded unexpectedly"); 74865695bbc89088b9526ea9045410e5afb70a985cplars } 75865695bbc89088b9526ea9045410e5afb70a985cplars 76865695bbc89088b9526ea9045410e5afb70a985cplars if (TEST_ERRNO != EMFILE) { 77354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_resm(TFAIL | TTERRNO, "pipe failed unexpectedly"); 78865695bbc89088b9526ea9045410e5afb70a985cplars } else { 7953740500924f6439623a8ac256b5be2d6c59ed1fGarrett Cooper tst_resm(TPASS, "failed with EMFILE"); 80865695bbc89088b9526ea9045410e5afb70a985cplars } 81865695bbc89088b9526ea9045410e5afb70a985cplars 82865695bbc89088b9526ea9045410e5afb70a985cplars } 83865695bbc89088b9526ea9045410e5afb70a985cplars cleanup(); 841e6f5a673655551de5734ff31ef48cd63b604e6dGarrett Cooper tst_exit(); 852c28215423293e443469a07ae7011135d058b671Garrett Cooper 86865695bbc89088b9526ea9045410e5afb70a985cplars} 87865695bbc89088b9526ea9045410e5afb70a985cplars 88865695bbc89088b9526ea9045410e5afb70a985cplars/* 89865695bbc89088b9526ea9045410e5afb70a985cplars * setup() - performs all ONE TIME setup for this test. 90865695bbc89088b9526ea9045410e5afb70a985cplars */ 91c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid setup(void) 92865695bbc89088b9526ea9045410e5afb70a985cplars{ 93865695bbc89088b9526ea9045410e5afb70a985cplars int i, numb_fds; 94865695bbc89088b9526ea9045410e5afb70a985cplars 95865695bbc89088b9526ea9045410e5afb70a985cplars tst_sig(NOFORK, DEF_HANDLER, cleanup); 96865695bbc89088b9526ea9045410e5afb70a985cplars 97865695bbc89088b9526ea9045410e5afb70a985cplars TEST_PAUSE; 98865695bbc89088b9526ea9045410e5afb70a985cplars 99865695bbc89088b9526ea9045410e5afb70a985cplars numb_fds = getdtablesize(); 100865695bbc89088b9526ea9045410e5afb70a985cplars 101865695bbc89088b9526ea9045410e5afb70a985cplars for (i = 0; i < numb_fds; i++) { 102865695bbc89088b9526ea9045410e5afb70a985cplars pipe_ret = pipe(pipes); 103865695bbc89088b9526ea9045410e5afb70a985cplars if (pipe_ret < 0) { 104865695bbc89088b9526ea9045410e5afb70a985cplars if (errno != EMFILE) { 105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tst_brkm(TBROK | TTERRNO, cleanup, 106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "didn't get EMFILE"); 107865695bbc89088b9526ea9045410e5afb70a985cplars } 108865695bbc89088b9526ea9045410e5afb70a985cplars break; 109865695bbc89088b9526ea9045410e5afb70a985cplars } 110865695bbc89088b9526ea9045410e5afb70a985cplars } 111865695bbc89088b9526ea9045410e5afb70a985cplars} 112865695bbc89088b9526ea9045410e5afb70a985cplars 113865695bbc89088b9526ea9045410e5afb70a985cplars/* 114865695bbc89088b9526ea9045410e5afb70a985cplars * cleanup() - performs all ONE TIME cleanup for this test at 115865695bbc89088b9526ea9045410e5afb70a985cplars * completion or premature exit. 116865695bbc89088b9526ea9045410e5afb70a985cplars */ 117c57fba5535abf457e33dd7a986b6c512d95cdef6Mike Frysingervoid cleanup(void) 118865695bbc89088b9526ea9045410e5afb70a985cplars{ 119ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 120