Bash 编写unix shell

Bash 编写unix shell,bash,process,pipe,Bash,Process,Pipe,我需要帮助写一个shell。我目前正在创建管道,并生成相关的子进程来读取和写入管道。似乎不起作用的部分是父进程和子进程之间的通信。我需要帮忙。首先,如果您能解释一下这是如何工作的(Stdin和Stdout也是如此),并帮助我剖析我所拥有的,以帮助我理解我所缺少的东西,我将不胜感激 总体情况如下: 您需要创建管道,例如使用管道(2)。对管道的调用返回一个文件描述符,该描述符必须存储在变量中 调用fork(2),它将复制当前进程,包括打开的文件和文件描述符 两个进程都使用dup2(2)重定向标准输入

我需要帮助写一个shell。我目前正在创建管道,并生成相关的子进程来读取和写入管道。似乎不起作用的部分是父进程和子进程之间的通信。我需要帮忙。首先,如果您能解释一下这是如何工作的(Stdin和Stdout也是如此),并帮助我剖析我所拥有的,以帮助我理解我所缺少的东西,我将不胜感激

总体情况如下:

  • 您需要创建管道,例如使用管道(2)。对管道的调用返回一个文件描述符,该描述符必须存储在变量中
  • 调用fork(2),它将复制当前进程,包括打开的文件和文件描述符
  • 两个进程都使用dup2(2)重定向标准输入/输出。例如,dup2(管道,标准输出)将当前进程(但不是分叉进程!)的标准输出重定向到管道中
  • 使用Exeve(2)和friends在您刚刚设置的环境中启动其他进程
  • 如果需要从子进程捕获输入、输出和错误,则需要三个管道和相应的dup2调用:

    int in,out,err,child; 
    in = pipe(); out = pipe(); err = pipe();
    child = fork();
    if ( child == 0 ) {
        dup2( in, STDIN );
        dup2( out, STDOUT );
        dup2( err, STDERR );
        execve(something);
    } else {
        /* read from out and err and write into in as necessary. */
    }
    

    谢谢你告诉我们,但是问题是什么呢?你能提供一个不工作的例子吗?也就是说,你的代码的一部分失败了。C和C++与此无关。<代码> MKFIFO(3)< /Cord>创建命名管道。这是没有必要的。使用
    pipe(2)
    创建匿名管道。哦,对了,谢谢。编辑那个。