I am working on a little something, and I found that output from my toybuf command redirected to a file is exceedingly slow. But if piped to cat, it runs about as fast as expected. So I messed around with the TOYFLAG_LINEBUF and with setvbuf() modes.
I put a line at the top of my program so it does only this: for (i = 0; i < 1024 * 512; i++) xprintf("%s\n", "asdfasdf"); return; Then I tried putting just in front of it one of these: setvbuf(stdout, 0, _IOLBF, 0); setvbuf(stdout, 0, _IOFBF, 1024); Can anyone explain these odd timings? with TOYFLAG_LINEBUF and: setvbuf(stdout, 0, _IOLBF, 0); real 0m13.281s user 0m0.611s sys 0m2.486s with TOYFLAG_LINEBUF and: setvbuf(stdout, 0, _IOFBF, 1024); real 0m0.087s user 0m0.045s sys 0m0.004s with TOYFLAG_LINEBUF only: real 0m12.634s user 0m0.513s sys 0m2.372s without TOYFLAG_LINEBUF and with: setvbuf(stdout, 0, _IOLBF, 0); real 0m39.077s user 0m1.410s sys 0m7.403s without TOYFLAG_LINEBUF and with: setvbuf(stdout, 0, _IOFBF, 1024); real 0m25.509s user 0m0.889s sys 0m4.835s without TOYFLAG_LINEBUF and no setvbuf() call: real 0m12.910s user 0m0.614s sys 0m2.402s Seems setvbuf(..., _IOLBF,...) alone is horribly slow, but with TOYFLAG_LINEBUF it runs about the same as no setvbuf() runs with or without TOYFLAG_LINEBUF. Using setvbuf(..., _IOFBF,...) without TOYFLAG_LINEBUF takes twice as long, but with TOYFLAG_LINEBUF it runs way faster (< 1 sec). These results were in Linux Mint. I got similar results with WSL Ubuntu, but more exaggerated (bad times were worse). Again, this is with output redirected to a file. Redirecting to /dev/null, or piping through cat or to a crc program that reads from stdin, they all run quite fast. What gives? _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net