我必须在C中编写一个命令解释器。它必须:
ls -a | wc
),最多3个重定向我们还可以假设一个固定的最大参数(比如MAXARG
)。
此刻我编写了这段代码,但我不知道为什么有些命令不起作用(例如cd
)。请帮帮我。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void parse(char *line, char **argv)
{
while (*line != '\0') {
while (*line == ' ' || *line == '\t' || *line == '\n' || *line=='|')
*line++ = '\0';
*argv++ = line;
while (*line != '\0' && *line != ' ' &&
*line != '\t' && *line != '\n')
line++;
}
*argv = '\0';
}
int main(int argc,char *argv[])
{
int child_pid;
char * arg[10];
int child_status;
char str[10];
do
{
printf(">> ");
gets(str);
parse(str,arg);
if(!strcmp(arg[0],"end"))
{
break;
}
child_pid = fork();
if(child_pid == 0)
{
execvp(*arg,arg);
printf("Unknown command\n");
}
else
{
wait(&child_status);
printf("koniec\n");
}
}
while(1==1);
return 0;
}