From 83326334d5bda7fefbd174630c23eae3b5f41604 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 15 Dec 2020 04:53:04 -0600 Subject: Speed up count: use 64k block size, update display at most 4x/second. --- toys/other/count.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'toys/other') diff --git a/toys/other/count.c b/toys/other/count.c index f3b6f821..3d388e78 100644 --- a/toys/other/count.c +++ b/toys/other/count.c @@ -17,16 +17,22 @@ config COUNT void count_main(void) { - uint64_t size = 0; + struct pollfd pfd = {0, POLLIN, 0}; + unsigned long long size = 0, last = 0, then = 0, now; + char *buf = xmalloc(65536); int len; - char buf[32]; + // poll, print if data not ready, update 4x/second otherwise for (;;) { - len = xread(0, toybuf, sizeof(toybuf)); + if (!(len = poll(&pfd, 1, (last != size) ? 250 : 0))) continue; + if (len<0 && errno != EINTR && errno != ENOMEM) perror_exit(0); + if ((len = xread(0, buf, 65536))) { + xwrite(1, buf, len); + size += len; + if ((now = millitime())-then<250) continue; + } + dprintf(2, "%llu bytes\r", size); if (!len) break; - size += len; - xwrite(1, toybuf, len); - xwrite(2, buf, sprintf(buf, "%"PRIu64" bytes\r", size)); } - xwrite(2, "\n", 1); + dprintf(2, "\n"); } -- cgit v1.2.3