我只是将代码放在这里执行程序
存在包含成员char* command_list[MAXCOMMANDS][MAXARGUMENTS]
此成员中每行的第一个位置包含该命令,该行中的其余项是参数
我已经完成了执行过程,在给出输入ls | wc
时给出**
DUP2 HERE:错误的文件描述符
下面的结构
struct command
{
ifstream input;
ofstream output;
int num_commands=-1;
int num_args[MAXCOMMANDS]={0};
char* command_list[MAXCOMMANDS][MAXARGS]; //command and their arguments storage
vector<string> pr_operator; //Pipe or redirection operators storage
bool background_task;
bool append;
};
执行以下功能
int execute()
{
pid_t pid,wpid;
int status;
int num_pipes=count_pipes();
int pfds[2*num_pipes];
for(int i=0;i<num_pipes;i++)
{
if(pipe(pfds+2*i)<0)
{
perror("Cannot Pipe");
exit(1);
}
}
for(int i=0,j=0;i<=s.num_commands;i++,j+=2)
{
pid=fork();
if(pid==0)
{
if(i>0) //if not first command
{
if(dup2(pfds[j-2],0)<0)
{perror("DUP2 HERE");exit(1);}
close(pfds[j-2]);
close(pfds[j-1]);
}
if(i<s.num_commands) // if not last command
{
if(dup2(pfds[j+1],1)<0)
{perror("DUP2");exit(1);}
close(pfds[j+1]);
close(pfds[j]);
}
if(execvp(s.command_list[i][0],s.command_list[i])==-1)
{
perror("My Shell");
exit(1);
}
}
else if(pid<0)
{
perror("My Shell");
exit(1);
}
else
{
for(int k=0;k<2*num_pipes;k++)
close(pfds[k]);
for(int k=0;k<num_pipes+1;k++)
wait(&status);
}
}
return 1;
}