tput(1) manpage, add -b buflen option, exit status
This commit is contained in:
parent
acce478d8e
commit
7c197c8e73
2 changed files with 65 additions and 9 deletions
39
sys/man/1/tput
Normal file
39
sys/man/1/tput
Normal file
|
@ -0,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.
|
|
@ -1,23 +1,41 @@
|
||||||
#include <u.h>
|
#include <u.h>
|
||||||
#include <libc.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
|
void
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int rc, cpid, fd, dopipe;
|
|
||||||
static char buf[buflen];
|
|
||||||
static uvlong bc, sec;
|
|
||||||
double speed;
|
double speed;
|
||||||
|
int rc, cpid;
|
||||||
|
char *buf;
|
||||||
|
|
||||||
dopipe = 0;
|
|
||||||
ARGBEGIN {
|
ARGBEGIN {
|
||||||
case 'p': dopipe = 1;
|
case 'b':
|
||||||
|
buflen = atoi(EARGF(usage()));
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
dopipe = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
} ARGEND
|
} ARGEND
|
||||||
|
|
||||||
|
if(argc != 0)
|
||||||
|
usage();
|
||||||
|
|
||||||
bc = 0;
|
bc = 0;
|
||||||
sec = 0;
|
sec = 0;
|
||||||
|
buf = sbrk(buflen);
|
||||||
cpid = rfork(RFPROC | RFMEM);
|
cpid = rfork(RFPROC | RFMEM);
|
||||||
if(cpid == 0) {
|
if(cpid == 0) {
|
||||||
while(1) {
|
while(1) {
|
||||||
|
@ -35,8 +53,7 @@ main(int argc, char **argv)
|
||||||
if(dopipe) write(1, buf, rc);
|
if(dopipe) write(1, buf, rc);
|
||||||
bc += rc;
|
bc += rc;
|
||||||
}
|
}
|
||||||
sprint(buf, "/proc/%d/note", cpid);
|
postnote(PNPROC, cpid, "kill");
|
||||||
fd = open(buf, OWRITE);
|
|
||||||
write(fd, "kill", 4);
|
|
||||||
if(rc < 0) sysfatal("%r");
|
if(rc < 0) sysfatal("%r");
|
||||||
|
exits(0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue