add directory study
This commit is contained in:
79
study/linux-travel/MINIX-1.5/1.5/Source/amoeba/util/from.c
Normal file
79
study/linux-travel/MINIX-1.5/1.5/Source/amoeba/util/from.c
Normal file
@@ -0,0 +1,79 @@
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include "amoeba.h"
|
||||
|
||||
#define BUFSIZE 20480
|
||||
|
||||
char * cmd;
|
||||
|
||||
|
||||
catchalarm()
|
||||
{
|
||||
fprintf(stderr, "%s: timeout\n", cmd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char ** argv;
|
||||
{
|
||||
unshort getreq();
|
||||
unshort putrep();
|
||||
char * malloc();
|
||||
int catchalarm();
|
||||
|
||||
char * buf;
|
||||
header hdr;
|
||||
unshort cnt;
|
||||
unshort bufsize = BUFSIZE;
|
||||
unsigned tim = 15 * 60; /* #secs before timeout */
|
||||
|
||||
cmd = *argv;
|
||||
if (argc > 1 && strncmp(argv[1], "-t", 2) == 0)
|
||||
{
|
||||
tim = atoi(&argv[1][2]);
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
if (tim)
|
||||
signal(SIGALRM, catchalarm);
|
||||
if (argc != 2 && argc != 3) /* if (!(argc & 2))?? */
|
||||
{
|
||||
fprintf(stderr, "Usage: %s [-ttime] [bufsize] port\n", cmd);
|
||||
exit(-1);
|
||||
}
|
||||
if (argc == 3)
|
||||
bufsize = atoi(argv[2]);
|
||||
if ((buf = malloc(bufsize * sizeof (char))) == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: out of memory\n", cmd);
|
||||
exit(-1);
|
||||
}
|
||||
strncpy(&hdr.h_port, argv[1], PORTSIZE);
|
||||
for (;;)
|
||||
{
|
||||
if (tim)
|
||||
alarm(tim);
|
||||
cnt = getreq(&hdr, buf, bufsize);
|
||||
if (tim)
|
||||
alarm(0);
|
||||
if ((short)cnt < 0)
|
||||
{
|
||||
fprintf(stderr, "%s: getreq failed\n", cmd);
|
||||
exit(-3);
|
||||
}
|
||||
hdr.h_status = 0;
|
||||
if (cnt != 0)
|
||||
if (write(1, buf, cnt) < 0)
|
||||
{
|
||||
perror(cmd);
|
||||
hdr.h_status = -1;
|
||||
}
|
||||
putrep(&hdr, NILBUF, 0);
|
||||
if (hdr.h_status)
|
||||
exit(-4);
|
||||
if (cnt == 0)
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user