+ #if !USE_POPEN
+ // Create stdin/stdout
+ if( pipe(stdin_pair) || pipe(stdout_pair) )
+ {
+ perror("pipe");
+ return -1;
+ }
+
+ parent_pid = getpid();
+ childPid = fork();
+
+ if( childPid < 0 )
+ {
+ perror("fork");
+ return -1;
+ }
+
+ // Child process
+ if( childPid == 0 )
+ {
+ // Close write end of stdin, and set it to #0
+ close(stdin_pair[1]); dup2(stdin_pair[0], 0);
+ // Close read end of stdout, and set it to #1
+ close(stdout_pair[0]); dup2(stdout_pair[1], 1);
+
+ execl("llogin", "door", "-w-", NULL);
+ kill(parent_pid, SIGCHLD);
+ perror("execl");
+ exit(-1);
+ }
+
+ child_stdin = fdopen(stdin_pair[1], "w");
+ close(stdin_pair[0]); // child stdin read
+ close(stdout_pair[1]); // child stdout write
+
+ #else