用到以下三个函数:
fork:pid_t fork(void); //创建子进程
int execvp(const char *file,char * const argv[]);//替换子进程
pid waitpid(int *status);进程等待
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
char *argv[8]={};
int argc=0;
void do_parse(char *buf)
{
int i;
int status=0;
for(i=0;buf[i]!=0;i++)
{
if(status==0&&!isspace(buf[i]))
{
argv[argc++]=buf+i;
status=1;
}
else if(isspace(buf[i]))
{
status=0;
buf[i]=0;
}
argv[argc]==NULL;
}
}
void do_execute()
{
pid_t id = fork();
if(id < 0)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(id == 0)
{
execvp(argv[0],argv);
perror("execvp");
exit(EXIT_FAILURE);
}
else
{
int st;
while(wait(&st) != id);
}
}
int main(void)
{
char buf[1024] = {};
while(1)
{
printf("my_shell>");
fgets(buf,sizeof(buf),stdin);
do_parse(buf);
do_execute();
}
}