60 lines
1.3 KiB
C
60 lines
1.3 KiB
C
#include <unistd.h>
|
|
#include <libowfat/errmsg.h>
|
|
#include <libowfat/buffer.h>
|
|
#include <sys/wait.h>
|
|
#include "fetcher.h"
|
|
|
|
#define dieusage() die(100, "usage: ", argv0, " [-v] [-j jobs] URL...\n\
|
|
(-v means verbose)")
|
|
|
|
int verbose = 0;
|
|
int jobs = 5;
|
|
|
|
int queuepipe[2];
|
|
/* merged stdout of workers */
|
|
int errpipe[2];
|
|
/* merged stderr of workers */
|
|
int outpipe[2];
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
errmsg_iam(*argv);
|
|
int i;
|
|
for (i = 1; i < argc; i++) {
|
|
if (argv[i][0] != '-') break;
|
|
if (argv[i][1] == '-' && !argv[i][2]) break;
|
|
switch (argv[i][1]) {
|
|
case 'j':
|
|
i++;
|
|
jobs = atoi(argv[i]);
|
|
if (jobs < 1)
|
|
die(100, "value for -n must be >= 1");
|
|
break;
|
|
case 'v':
|
|
verbose = 1;
|
|
break;
|
|
default: dieusage();
|
|
}
|
|
}
|
|
argc -= i;
|
|
argv += i;
|
|
if (argc < 1) dieusage();
|
|
|
|
if (pipe(errpipe)<0
|
|
|| pipe(outpipe)<0
|
|
) diesys(111, "pipe");
|
|
|
|
if (verbose) {
|
|
buffer_puts(buffer_2, "Using ");
|
|
buffer_putlong(buffer_2, jobs);
|
|
buffer_puts(buffer_2, " parallel jobs\n");
|
|
buffer_flush(buffer_2);
|
|
}
|
|
|
|
char **fetchcmd = (char *[]){"curl", "-o", "a.txt", "https://lab0x13.site/index.html", NULL};
|
|
pid_t pid = spawnchild(fetchcmd, outpipe[1], errpipe[1]);
|
|
if (pid<0)
|
|
exit(111);
|
|
waitpid(pid, NULL, 0);
|
|
exit(0);
|
|
}
|