我需要帮助写一个shell。我目前正在创建管道和产生相关子进程以读取和写入管道。似乎不起作用的部分是父进程和子进程之间的通信。我需要帮助。首先,如果你愿意解释一下它是如何工作的(Stdin和Stdout也是如此),我将不胜感激,并帮助我解剖一下,帮助我理解我所缺少的东西。
答案 0 :(得分:0)
总体情况是:
如果您需要从子进程捕获输入,输出和错误,则需要三个管道并根据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. */
}