我正在尝试使用 C 实现 shell。我目前正在尝试处理程序的管道,但还没有运气。我想知道如何处理诸如
SHELL$: sort < txtFile | grep key
我解析了命令行,以便我在一个 char* 数组中有 sort < txtFile,在另一个 char* 数组中有 grep 键
任何帮助将不胜感激。
这是我到目前为止的代码:
PS:我没有包含处理重定向的代码
pid = fork();
if(pid == 0)
{
/* child process */
if( PIPE_FLAG )
{
close(c2p[0]);
if(dup2(c2p[1], STDOUT_FILENO) == -1){
perror("dup2() failed");
exit(2);
}
}
/* Execute command */
execvp(cmd_args[0], cmd_args);
perror("exec failed 1. "); /* return only when exec fails */
exit(-1);
}
else if(pid > 0)
{
/* parent process */
if(!async)
waitpid(pid, NULL, 0);
else
printf("this is an async call\n");
if(PIPE_FLAG)
{
close(c2p[1]);
if(dup2(c2p[0], STDIN_FILENO) == -1){
perror("dup2() failed");
exit(-1);
}
execvp(nxt_args[0], nxt_args);
perror("exec failed 2. ");
exit(-1);
}
}
else
{
/* error occurred */
perror("fork failed");
exit(1);
}
这是我的主要内容:
int main (int argc, char* argv [])
{
char commands[BUFSIZ];
for(;;)
{
printf("MYSHELL$ ");
if(fgets(commands, BUFSIZ, stdin) == NULL)
{
perror("fgets failed");
exit(1);
}
execute(commands) ;
}
return 0;
}
所以在调用上述命令后,我的 shell 循环终止。我该如何解决这个问题?