我正在编写我的shell,这是一段代码。任何人都可以解释为什么我没有达到以下功能的最后,即OUT没有打印。我已阅读shell相关的文章,但他们似乎没有帮助。 commandargs()函数返回格式化的字符串,即删除空格和存储参数。我的两个晚上只是浪费在做调试。
int shellpipe(char **arg)
{
// pid_t childpid;
int status;
int pfd[2];
pid_t cpid;
char c;
char **p=commandargs(arg[0]);
char **q=commandargs(arg[1]);
cout<<"q0";//not printed
if ( pipe(pfd) < 0){
perror("pipe");
return 1;
}
cpid = fork();
if( cpid == 0 )
{
/* CHILD 1*/
close(0);
dup2(pfd[0], 0);
close(pfd[1]);
if (execvp(q[0],q)==-1)
perror("Executing Error");
exit(0);
} else if ( cpid > 0){
/* PARENT */
close(1);
dup2(pfd[1], 1);
close(pfd[0]);
if (execvp(p[0],p)==-1)
perror("Executing Error");
close(pfd[1]);
close(1);
wait(&status);
}else{
/* ERROR */
perror("fork");
return 1;
}
cout<<"Out";//control don't reach here
}
答案 0 :(得分:0)
“打印”未打印,因为输出流已关闭。也可能是子进程永远不会完成,但这需要仔细查看参数字符串。