#include < stdio.h >
#include < fcntl.h >
main()
{
int pa[2];
int pb[2];
int fd;
int dummy;
pipe(pa);
if (fork() == 0) {
fd = open("f1", O_RDONLY);
if (fd < 0) { perror("f1"); exit(1); }
dup2(fd, 0);
dup2(pa[1], 1);
close(fd);
close(pa[0]);
close(pa[1]);
execlp("sort", "sort", NULL);
perror("execlp");
exit(1);
}
close(pa[1]);
pipe(pb);
if (fork() == 0) {
dup2(pa[0], 0);
dup2(pb[1], 1);
close(pa[0]);
close(pb[0]);
close(pb[1]);
execlp("head", "head", "-5", NULL);
perror("execlp");
exit(1);
}
close(pa[0]);
close(pb[1]);
if (fork() == 0) {
dup2(pb[0], 0);
close(pb[0]);
execlp("cat", "cat", "-n", NULL);
perror("execlp");
exit(1);
}
close(pb[0]);
wait(&dummy);
wait(&dummy);
wait(&dummy);
}
One point for each of the following:
Points were deducted for the following reasons: