Как обрабатывать ввод в программе оболочки C во время исполнения - PullRequest
0 голосов
/ 08 июня 2010

Я сейчас пишу свою собственную программу оболочки.Эта простая оболочка может просто выполнять команды.

При выполнении таких команд, как vi или calc, которые требуют ввода с терминала, команда выполняется и ожидает ввода от пользователя.Но я не могу дать никакого ввода на экране.

Как обрабатывать ввод во время форка и выполнения.

Вот фрагмент кода, который выполняет команды:

    if((pid = fork()) < 0)
    {
            perror("Fork failed");
            exit(errno);
    }
    if(pid == 0)
    {
            // Child process
            if(execvp(arguments[0], arguments) == -1)
            {
                    child_status = errno;
                    switch(child_status)
                    {
                            case ENOENT:
                                    printf(" command not found \n");
                                    break;
                    }
                    exit(errno);
            }
    }
    else
    {
            // parent process
            int wait_stat;
            if(waitpid(pid , &wait_stat, WNOHANG) == -1)
            {
                    printf(" waitpid failed \n");
                    return;
            }
    }

} ~

Спасибо,

1 Ответ

3 голосов
/ 08 июня 2010

WNOHANG заставляет родительский процесс не ждать, и поэтому (в зависимости от платформы) дочерний процесс будет отсоединен от терминала IO или умрет.

...