- child = fork();
-
- /*
- * Start the child process if we are in the child; open the two
- * slave pseudo-ttys and close the masters after we are done with them.
- */
-
- if (child == 0) {
- if (!(slavename = ptsname(master_in))) {
- die("Unable to determine name of slave pty: %s\n",
- strerror(errno));
- }
-
- if ((slave = open(slavename, O_RDWR)) < 0) {
- die("Unable to open slave pty \"%s\": %s\n", slavename,
- strerror(errno));
- }
-
- dup2(slave, STDIN_FILENO);
- close(slave);
- close(master_in);
-
- if (!(slavename = ptsname(master_out))) {
- die("Unable to determine name of slave pty: %s\n",
- strerror(errno));
- }
-
- if ((slave = open(slavename, O_RDWR | O_NOCTTY)) < 0) {
- die("Unable to open slave pty \"%s\": %s\n", slavename,
- strerror(errno));
- }
-
- dup2(slave, STDOUT_FILENO);
- dup2(slave, STDERR_FILENO);
- close(slave);
- close(master_out);
-
- execvp(argv[2], argv + 2);
-
- die("execvp(%s) failed: %s\n", argv[2], strerror(errno));
-
- } else if (child < 0) {