git: 9front

Download patch

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);
 }
--