ref: 2d38fa5b205012f80439ad00bc3eba375f950312
parent: 0557b682a51a2f202e2a9bac8a6d4b33c376bf41
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Thu Jul 5 10:52:38 EDT 2012
tput(1) manpage, add -b buflen option, exit status
--- /dev/null
+++ b/sys/man/1/tput
@@ -1,0 +1,39 @@
+.TH TPUT 1
+.SH NAME
+tput \- measure read throughput
+.SH SYNOPSIS
+.B tput
+[
+.B -b
+.I buflen
+] [
+.B -p
+]
+.SH DESCRIPTION
+.I Tput
+continuously reads standard input writing throughput statistics
+to standard error. The throughput value is calculated and written
+once per second and automatically scaled to kilo-, mega- or gigabytes.
+.PP
+When the
+.B -p
+flag is specified,
+.I tput
+will write the data read to standard output (the default is to
+discard the data).
+.PP
+A read blocksize (default is 8192) in bytes can be given with the
+.B -b
+.I buflen
+option.
+.SH EXAMPLE
+.EX
+tput </dev/zero
+.EE
+.SH SOURCE
+.B /sys/src/cmd/tput.c
+.SH SEE ALSO
+.IR iostats (4)
+.SH DIAGNOSTICS
+.I Tput
+sets error status on read error.
--- a/sys/src/cmd/tput.c
+++ b/sys/src/cmd/tput.c
@@ -1,23 +1,41 @@
#include <u.h>
#include <libc.h>
-enum {buflen = 4096};+int dopipe;
+int buflen = 8192;
+uvlong bc, sec;
void
+usage(void)
+{+ fprint(2, "usage: %s [-b buflen] [-p]\n", argv0);
+ exits("usage");+}
+
+void
main(int argc, char **argv)
{- int rc, cpid, fd, dopipe;
- static char buf[buflen];
- static uvlong bc, sec;
double speed;
+ int rc, cpid;
+ char *buf;
- dopipe = 0;
ARGBEGIN {- case 'p': dopipe = 1;
+ case 'b':
+ buflen = atoi(EARGF(usage()));
+ break;
+ case 'p':
+ dopipe = 1;
+ break;
+ default:
+ usage();
} ARGEND
+
+ if(argc != 0)
+ usage();
bc = 0;
sec = 0;
+ buf = sbrk(buflen);
cpid = rfork(RFPROC | RFMEM);
if(cpid == 0) { while(1) {@@ -35,8 +53,7 @@
if(dopipe) write(1, buf, rc);
bc += rc;
}
- sprint(buf, "/proc/%d/note", cpid);
- fd = open(buf, OWRITE);
- write(fd, "kill", 4);
+ postnote(PNPROC, cpid, "kill");
if(rc < 0) sysfatal("%r");+ exits(0);
}
--
⑨