The accepted answer adapted to zsh
:
#+begin_src bsh.dash :results verbatim :exports both :wrap exampletest-buffer() { test $# -ge 1 || { echo "usage: $0 write-size [wait-time]"; return 1; } test $# -ge 2 || set -- "$@" 1 bytes_written=$( { exec 3>&1 { perl -e ' $size = $ARGV[0]; $block = q(a) x $size; $num_written = 0; sub report { print STDERR $num_written * $size, qq(\n); } report; while (defined syswrite STDOUT, $block) { $num_written++; report; }'"$1" 2>&3 } | (sleep "$2"; exec 0<&-); } | tail -1 ) printf "write size: %10d; bytes successfully before error: %d\n" \"$1" "$bytes_written"}unamefor i in {1..18} ; do test-buffer $((2**i)) 1done#+end_src
Results:
#+begin_exampleDarwinwrite size: 2; bytes successfully before error: 65536write size: 4; bytes successfully before error: 65536write size: 8; bytes successfully before error: 65536write size: 16; bytes successfully before error: 65536write size: 32; bytes successfully before error: 65536write size: 64; bytes successfully before error: 65536write size: 128; bytes successfully before error: 65536write size: 256; bytes successfully before error: 65536write size: 512; bytes successfully before error: 65536write size: 1024; bytes successfully before error: 65536write size: 2048; bytes successfully before error: 65536write size: 4096; bytes successfully before error: 65536write size: 8192; bytes successfully before error: 65536write size: 16384; bytes successfully before error: 65536write size: 32768; bytes successfully before error: 65536write size: 65536; bytes successfully before error: 65536write size: 131072; bytes successfully before error: 0write size: 262144; bytes successfully before error: 0#+end_example