/* * TEST.C * * create a socketpair() * chdir into NET1 * filedes #2 = LOG * filedes #0 = first pair * fork/exec * * chdir into NET2 * filedes #2 = LOG * etc.. * */ #include #include #include #include char *arg; main(ac,av) char *av[]; { int des[2]; int fd; int error; arg = av[1]; /* NULL ok */ error = socketpair(AF_UNIX, SOCK_STREAM, 0, des); negerr(error, "socketpair"); if (chdir("NET1") < 0) { puts("Unable to CD NET1"); exit(1); } fd = open("LOG", O_WRONLY|O_CREAT|O_TRUNC, 0666); dnet(des[0], fd); if (chdir("../NET2") < 0) { puts("Unable to CD NET2"); exit(1); } fd = open("LOG", O_WRONLY|O_CREAT|O_TRUNC, 0666); dnet(des[1], fd); } dnet(comfd, logfd) { int o0 = dup(0); int o1 = dup(1); int o2 = dup(2); dup2(comfd, 0); dup2(logfd, 1); dup2(logfd, 2); if (fork() == NULL) { fcntl(0, F_SETOWN, getpid()); execlp("dnet", "dnet", arg, NULL); puts("unable to find DNET"); exit(1); } dup2(o0, 0); dup2(o1, 1); dup2(o2, 2); close(o0); close(o1); close(o2); } negerr(error, str) char *str; { if (error < 0) { perror(str); exit(1); } }