commit - efd7212c00a499330d2d84652a2697824142e7b7
commit + 05abefb2a0866dde7721be1f5c57fd35a5bd140f
blob - 3a089f6c9aacfcaa7c64e98975c096b68069a1d2
blob + 17ef04fce72d98bc56dda6b0fa411874c56650ea
--- src/cmd/9p.c
+++ src/cmd/9p.c
fprint(2, " write [-l] name\n");
fprint(2, " writefd name\n");
fprint(2, " stat name\n");
+ fprint(2, " rdwr name\n");
// fprint(2, " ls name\n");
fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n");
threadexitsall("usage");
void xwritefd(int, char**);
void xstat(int, char**);
void xls(int, char**);
+void xrdwr(int, char**);
struct {
char *s;
"readfd", xreadfd,
"writefd", xwritefd,
"stat", xstat,
+ "rdwr", xrdwr,
// "ls", xls,
};
void
xread(int argc, char **argv)
{
- char buf[1024];
+ char buf[4096];
int n;
CFid *fid;
void
xreadfd(int argc, char **argv)
{
- char buf[1024];
+ char buf[4096];
int n;
int fd;
void
xwrite(int argc, char **argv)
{
- char buf[1024];
+ char buf[4096];
int n, did;
CFid *fid;
Biobuf *b;
ARGBEGIN{
case 'l':
byline = 1;
+ break;
default:
usage();
}ARGEND
n = strlen(p);
did = 1;
if(fswrite(fid, p, n) != n)
- sysfatal("write error: %r");
+ fprint(2, "write: %r\n");
}
free(b);
}else{
void
xwritefd(int argc, char **argv)
{
- char buf[1024];
+ char buf[4096];
int n;
int fd;
fmtinstall('M', dirmodefmt);
print("%D\n", d);
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);
}