试图编写一个处理内部和外部命令的 shell。我可以一次获取内部命令和一个外部命令。
我的问题是如何让这样的命令运行:“ls -l | grep lib | wc -l”
我正在使用 fork(),并在 char*[] 中通过 execv() 传递外部命令。
关于如何工作的任何想法?我假设使用 pipe() 或其他东西,但我不确定。
问题的第二部分:如何处理 i/o 重定向?谁能指出我有帮助的地方?
编辑 到目前为止,@Alex W 是我的英雄。但是,由于我是 pipe() 和 dup2() 命令的新手,所以我对每个调用和变量的用途有点犹豫。
这是我处理单个外部命令的代码(示例=“ls -l -a”):
pid_t pid;
pid = fork();
if (pid < 0)
{
cout << "Fork failed." << endl;
}
else if (pid == 0)
{
execvp(exec_args[0], exec_args); //exec_args is a char*[] where
_exit (EXIT_FAILURE); //exec_args[0] contains "/bin/ls"
} //[1]="ls" and [2]="-l" [3]="-a"
else
{
int status;
waitpid(pid, &status, 0);
}
break;