强调重要的一点 open 和 dup2 一定要在fork后的子进程中执行。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<ctype.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
void do_parse(char *buf,char* argv[])
{
if(buf==NULL)
{
return;
}
if(argv==NULL)
{
return;
}
int i;
int argc=0;
int status=0;
for(i=0;buf[i];i++)
{
if(!isspace(buf[i]) && status==0)
{
argv[argc++]=buf+i;
status=1;
}
else if(isspace(buf[i]))
{
status=0;
buf[i]='\0';
}
}
argv[argc]=NULL;
}
int Has_Pipe_Or_Rediretion(char* argv[])
{
int i=1;
//Start from 1 because before '|' should have command.
while(argv[i]!=NULL)
{
if(strcmp(argv[i],"|")==0)
{
argv[i]=NULL;
return 1;
}
else if(strcmp(argv[i],">")==0)
{
argv[i]=NULL;
return 2;
}
else if(strcmp(argv[i],">>")==0)
{
argv[i]=NULL;
return 3;
}
else if