c - 如何在 exec 期间处理 C shell 程序中的输入

标签 c unix exec fork

我目前正在编写自己的 shell 程序。这个简单的 shell 只能执行命令。

当执行像 vi 或 calc 这样需要从终端输入的命令时,命令正在执行并等待用户输入。但是我无法在屏幕上提供任何输入。

在 fork 和 exec 期间应该如何处理输入。

这是执行命令的代码片段:

    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;
            }
    }

} ~

谢谢,

最佳答案

WNOHANG 导致父进程不等待,因此(取决于平台)子进程将从终端 IO 分离或死掉。

删除 WNOHANG

关于c - 如何在 exec 期间处理 C shell 程序中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000127/

相关文章:

c++ - 头文件包含和性能注意事项 c++

c - 如果 strcat 函数中的目标字符串不是空终止的,它是否是未定义的行为?

c - 使用 fork() 和 execlp 计算行数

permissions - 重载 `.zshrc` 的推荐方法? (`source` VS `exec` ?)

python - 在 C++ 中可能等效于 Python `exec`

c - 函数作为变量使用,如何使用其内存地址知道实际调用了哪个函数

c - STM32F1 CANbus - 接收不工作

macos - 如何从 shell 脚本为 .dmg 创建空的 'Icon\r' 文件?

pthreads - pthread的调度方法?

xml - 从 unix 命令行进行基本 xml 解析的最简单方法