From d3df308747ee4d1fcc063a348dcf1146b390bda7 Mon Sep 17 00:00:00 2001 From: rsc Date: Sat, 6 Dec 2003 18:08:52 +0000 Subject: File system stuff. --- src/cmd/9p.c | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/cmd/9p.c (limited to 'src/cmd/9p.c') diff --git a/src/cmd/9p.c b/src/cmd/9p.c new file mode 100644 index 00000000..7c018c34 --- /dev/null +++ b/src/cmd/9p.c @@ -0,0 +1,191 @@ +#include +#include +#include +#include + +char *addr; + +void +usage(void) +{ + fprint(2, "usage: 9p [-a address] cmd args...\n"); + fprint(2, "possible cmds:\n"); + fprint(2, " read name\n"); + fprint(2, " write name\n"); + fprint(2, " stat name\n"); +// fprint(2, " ls name\n"); + fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n"); + exits("usage"); +} + +void xread(int, char**); +void xwrite(int, char**); +void xstat(int, char**); +void xls(int, char**); + +struct { + char *s; + void (*f)(int, char**); +} cmds[] = { + "read", xread, + "write", xwrite, + "stat", xstat, +// "ls", xls, +}; + +void +main(int argc, char **argv) +{ + char *cmd; + int i; + + ARGBEGIN{ + case 'a': + addr = EARGF(usage()); + break; + default: + usage(); + }ARGEND + + if(argc < 1) + usage(); + + cmd = argv[0]; + for(i=0; i 0) + write(1, buf, n); + if(n < 0) + sysfatal("read error: %r"); + exits(0); +} + +void +xwrite(int argc, char **argv) +{ + char buf[1024]; + int n; + Fid *fid; + + ARGBEGIN{ + default: + usage(); + }ARGEND + + if(argc != 1) + usage(); + + fid = xopen(argv[0], OWRITE|OTRUNC); + while((n = read(0, buf, sizeof buf)) > 0) + if(fswrite(fid, buf, n) != n) + sysfatal("write error: %r"); + if(n < 0) + sysfatal("read error: %r"); + exits(0); +} + +void +xstat(int argc, char **argv) +{ + Dir *d; + Fid *fid; + + ARGBEGIN{ + default: + usage(); + }ARGEND + + if(argc != 1) + usage(); + + fid = xwalk(argv[0]); + if((d = fsdirfstat(fid)) < 0) + sysfatal("dirfstat: %r"); + fmtinstall('D', dirfmt); + fmtinstall('M', dirmodefmt); + print("%D\n", d); + exits(0); +} -- cgit v1.2.3