#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char *argv[]) {
int n;
pid_t pid;
char arg[10];
int p[2];
int p2[2];
sscanf(argv[1],"%d",&n);
pipe(p);
if (fork()==0) {
close(p[0]);
dup2(p[1],STDOUT_FILENO);
close(p[1]);
execlp("elimine","elimine","1",NULL);
exit(1);
}
close(p[1]);
for (int i=2; i<=n; i++) {
pipe(p2);
switch(pid = fork()) {
case 0:
sprintf(arg,"%d",i);
dup2(p[0],STDIN_FILENO);
close(p[0]);
close(p2[0]);
dup2(p2[1],STDOUT_FILENO);
close(p2[1]);
execlp("elimine","elimine",arg,NULL);
exit(1);
break;
case -1:
fprintf(stderr,"oups\n");
break;
default:
close(p2[1]);
p[0] = p2[0];
p[1] = p2[1];
break;
}
}
if (fork()==0) {
dup2(p[0],STDIN_FILENO);
close(p[0]);
execlp("elimine","elimine","0",NULL);
exit(1);
}
for (int i=1; i<=n; i++) {
waitpid(-1,NULL,0);
}
exit(0);
}