bigger buffers; add rdwr

This commit is contained in:
rsc 2005-02-13 18:32:38 +00:00
parent efd7212c00
commit 05abefb2a0

View file

@ -19,6 +19,7 @@ usage(void)
fprint(2, " write [-l] name\n"); fprint(2, " write [-l] name\n");
fprint(2, " writefd name\n"); fprint(2, " writefd name\n");
fprint(2, " stat name\n"); fprint(2, " stat name\n");
fprint(2, " rdwr name\n");
// fprint(2, " ls name\n"); // fprint(2, " ls name\n");
fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n"); fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n");
threadexitsall("usage"); threadexitsall("usage");
@ -30,6 +31,7 @@ void xreadfd(int, char**);
void xwritefd(int, char**); void xwritefd(int, char**);
void xstat(int, char**); void xstat(int, char**);
void xls(int, char**); void xls(int, char**);
void xrdwr(int, char**);
struct { struct {
char *s; char *s;
@ -40,6 +42,7 @@ struct {
"readfd", xreadfd, "readfd", xreadfd,
"writefd", xwritefd, "writefd", xwritefd,
"stat", xstat, "stat", xstat,
"rdwr", xrdwr,
// "ls", xls, // "ls", xls,
}; };
@ -127,7 +130,7 @@ xopenfd(char *name, int mode)
void void
xread(int argc, char **argv) xread(int argc, char **argv)
{ {
char buf[1024]; char buf[4096];
int n; int n;
CFid *fid; CFid *fid;
@ -150,7 +153,7 @@ xread(int argc, char **argv)
void void
xreadfd(int argc, char **argv) xreadfd(int argc, char **argv)
{ {
char buf[1024]; char buf[4096];
int n; int n;
int fd; int fd;
@ -173,7 +176,7 @@ xreadfd(int argc, char **argv)
void void
xwrite(int argc, char **argv) xwrite(int argc, char **argv)
{ {
char buf[1024]; char buf[4096];
int n, did; int n, did;
CFid *fid; CFid *fid;
Biobuf *b; Biobuf *b;
@ -184,6 +187,7 @@ xwrite(int argc, char **argv)
ARGBEGIN{ ARGBEGIN{
case 'l': case 'l':
byline = 1; byline = 1;
break;
default: default:
usage(); usage();
}ARGEND }ARGEND
@ -203,7 +207,7 @@ xwrite(int argc, char **argv)
n = strlen(p); n = strlen(p);
did = 1; did = 1;
if(fswrite(fid, p, n) != n) if(fswrite(fid, p, n) != n)
sysfatal("write error: %r"); fprint(2, "write: %r\n");
} }
free(b); free(b);
}else{ }else{
@ -225,7 +229,7 @@ xwrite(int argc, char **argv)
void void
xwritefd(int argc, char **argv) xwritefd(int argc, char **argv)
{ {
char buf[1024]; char buf[4096];
int n; int n;
int fd; int fd;
@ -270,3 +274,37 @@ xstat(int argc, char **argv)
print("%D\n", d); print("%D\n", d);
threadexitsall(0); threadexitsall(0);
} }
void
xrdwr(int argc, char **argv)
{
char buf[4096];
int n;
CFid *fid;
ARGBEGIN{
default:
usage();
}ARGEND
if(argc != 1)
usage();
fid = xopen(argv[0], ORDWR);
for(;;){
if((n = fsread(fid, buf, sizeof buf)) < 0)
fprint(2, "read: %r\n");
else{
write(1, buf, n);
write(1, "\n", 1);
}
n = read(0, buf, sizeof buf);
if(n <= 0)
break;
if(buf[n-1] == '\n')
n--;
if(fswrite(fid, buf, n) != n)
fprint(2, "write: %r\n");
}
threadexitsall(0);
}