📄 x_dumper.c,v
字号:
head 1.2;access;symbols;locks dls:1.2; strict;comment @ * @;1.2date 97.09.21.19.29.03; author dls; state Dist;branches;next 1.1;1.1date 94.08.12.06.02.59; author dls; state Old;branches;next ;desc@@1.2log@pre-3e code@text@/* x_dumper.c - x_dumper */#include <conf.h>#include <kernel.h>#include <proc.h>#include <network.h>static dump();static int count, recd = 0;static char buf[256]; /* for sprintf()'s *//*------------------------------------------------------------------------ * x_dumper - (command dumper) dump data to a remote TCP echo *------------------------------------------------------------------------ */COMMAND x_dumper(stdin, stdout, stderr, nargs, args)int stdin, stdout, stderr, nargs;char *args[];{ char *rhost; int cmax; if (nargs == 1) { write(stderr, "usage: dumper host [count]\n", 27); return SYSERR; } cmax = 1024; if (nargs == 3) { cmax = atoi(args[2]); if (cmax <= 0) { write(stderr, "dumper: illegal count\n", 22); return SYSERR; } } rhost = args[1]; dump(rhost, cmax, stdout, stderr); return OK;}staticdump(rhost, cmax, stdout, stderr)char *rhost;int cmax, stdout, stderr;{ IPaddr addr; char host[22]; /* allows "XXX.XXX.XXX.XXX:XXXXX\0" */ int fd, cc, wrv; char *inbuf, *outbuf; int sent;#define BUFSZ 4000 inbuf = (char *)getmem(BUFSZ); outbuf = (char *)getmem(BUFSZ); if ((addr = name2ip(rhost)) == SYSERR) { write(stdout, "unknown host\n", 13); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } ip2dot(host, addr); strcat(host, ":7"); fd = open(TCP, host, ANYLPORT); if (fd == SYSERR) { freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } if (fd < 0) { sprintf(buf, "open: %s\n", tcperror[-fd]); write(stderr, buf, strlen(buf)); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } count = recd = 0; while (1) { int cctot; int i; do { outbuf[count % BUFSZ] = count %26 + 'a'; ++count; } while (count % BUFSZ); cctot = 0; sent = BUFSZ; if (count > cmax) { count = cmax; sent = count % BUFSZ; } wrv = write(fd, outbuf, sent); if (wrv < 0) { summary(stdout); sprintf(buf, "write: %s\n", tcperror[-wrv]); write(stderr, buf, strlen(buf)); close(fd); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } while (cctot < sent) { int cc; cc = read(fd, &inbuf[cctot], BUFSZ-cctot); if (cc <= 0 || cc == SYSERR) { summary(stdout); sprintf(buf, "read: %s\n", tcperror[-cc]); write(stderr, buf, strlen(buf)); close(fd); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } recd += cc; cctot += cc; } for (i=0; i<sent; ++i) if (inbuf[i] != outbuf[i]) break; if (i != sent) { int start, finish; count -= sent; start = i-10; if (start < 0) start = 0; finish = i+11; if (finish > sent-1) finish = sent-1; inbuf[finish] = '\0'; outbuf[finish] = '\0'; sprintf(buf, "in %d: %s\n", count, &inbuf[start]); write(stdout, buf, strlen(buf)); sprintf(buf, "out %d: %s\n", count, &outbuf[start]); write(stdout, buf, strlen(buf)); summary(stdout); close(fd); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return SYSERR; } if (count == cmax) break; } summary(stdout); close(fd); freemem(inbuf, BUFSZ); freemem(outbuf, BUFSZ); return OK;}summary(stdout){ sprintf(buf, "%d sent, %d rec'd\n", count, recd); write(stdout, buf, strlen(buf));}@1.1log@Initial revision@text@d55 1a55 1 if (name2ip(addr, rhost) == SYSERR) {d61 2a62 2 sprintf(host, "%u.%u.%u.%u:7", BYTE(addr, 0), BYTE(addr, 1), BYTE(addr, 2), BYTE(addr, 3));@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -