add con
This commit is contained in:
parent
d9742d7e94
commit
e29d0c84fe
1 changed files with 57 additions and 0 deletions
57
src/cmd/9p.c
57
src/cmd/9p.c
|
|
@ -33,11 +33,13 @@ void xwritefd(int, char**);
|
|||
void xstat(int, char**);
|
||||
void xls(int, char**);
|
||||
void xrdwr(int, char**);
|
||||
void xcon(int, char**);
|
||||
|
||||
struct {
|
||||
char *s;
|
||||
void (*f)(int, char**);
|
||||
} cmds[] = {
|
||||
"con", xcon,
|
||||
"read", xread,
|
||||
"write", xwrite,
|
||||
"readfd", xreadfd,
|
||||
|
|
@ -318,6 +320,61 @@ xrdwr(int argc, char **argv)
|
|||
threadexitsall(0);
|
||||
}
|
||||
|
||||
void
|
||||
rdcon(void *v)
|
||||
{
|
||||
char buf[4096];
|
||||
CFid *fid;
|
||||
|
||||
fid = v;
|
||||
for(;;){
|
||||
n = read(0, buf, sizeof buf);
|
||||
if(n <= 0)
|
||||
threadexitsall(0);
|
||||
if(fswrite(fid, buf, n) != n)
|
||||
fprint(2, "write: %r\n");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xcon(int argc, char **argv)
|
||||
{
|
||||
char buf[4096], *r, *w, *e;
|
||||
int n, nocr;
|
||||
CFid *fid;
|
||||
|
||||
nocr = 1;
|
||||
|
||||
ARGBEGIN{
|
||||
case 'r':
|
||||
nocr = 0;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
if(argc != 1)
|
||||
usage();
|
||||
|
||||
fid = xopen(argv[0], ORDWR);
|
||||
proccreate(rdcon, fid, STACK);
|
||||
for(;;){
|
||||
n = fsread(fid, buf, n);
|
||||
if(n <= 0)
|
||||
threadexitsall(0);
|
||||
if(nocr){
|
||||
for(r=w=buf, e=buf+n; r<e; r++)
|
||||
if(*r != '\r')
|
||||
*w++ = *r;
|
||||
n = w-buf;
|
||||
}
|
||||
if(write(1, buf, n) != n)
|
||||
threadexitsall(0);
|
||||
}
|
||||
fsclose(fid);
|
||||
threadexitsall(0);
|
||||
}
|
||||
|
||||
static char *mon[] =
|
||||
{
|
||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue