#!/usr/bin/perl -w use strict; use Socket; use BSD::Resource; setrlimit(RLIMIT_NOFILE, 100000, 100000) or die "Cannot set rlimit - $!"; open OLDOUT, ">&STDOUT"; for my $max qw/1000 2000 4000 8000 16000/ { open STDOUT, ">&", \*OLDOUT or die "reset STDOUT - $!"; my @fh; my $count = 0; while ($count < $max){ open my $fh, ">/tmp/temp.$count" or die "open $count - $!"; push @fh, $fh; $count++; } print "opened $count files\n"; my ($in, $out); my $buf; open STDOUT, ">/dev/null" or die "redirect - $!"; socketpair( $in, $out, AF_UNIX, SOCK_STREAM, PF_UNSPEC) or die $!; open STDOUT, ">&=", fileno($out) or die ">&= fileno(fd) - $!"; open STDOUT, ">&=", $out or die ">&= fd - $!"; open STDOUT, ">&", \*OLDOUT or die "reset2 STDOUT - $!"; print "no problem with $count!\n"; } exit;