myshell.c
//strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。
//当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。
//在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
void Parse(char buf[],char* argv[])
{
char* ptr = strtok(buf," ");
size_t argc = 0;
argv[argc++] = ptr;
while(ptr != NULL)
{
ptr = strtok(NULL," ");
argv[argc++] = ptr;
}
argv[argc] = NULL;
return;
}
void Exec(char* argv[])
{
pid_t ret = fork();
if(ret > 0)
{
//father
wait(NULL);
}
else if(ret == 0)
{
//child
execvp(argv[0],argv);
perror("execvp");
}
else
{
perror("fork");
}
return;
}
void Run()
{
while(1)
{
printf("[myshell]# ");
fflush(stdout);
char buf[1024] = {0};
gets(buf);
char* argv[100] = {NULL};
Parse(buf,argv);
Exec(argv);
}
}
int main()
{
Run();
return 0;
}