#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define MAX_LINE 80
struct command_struct{
int argc;
char* name;
char* argv[64];
};
void parse(char* line, char** argv)
{
while (*line != '/0')
{
while (*line==' ' || *line=='/t' || *line=='/n')
{
if ('/n' == *line)
break;
*line++ = '/0';
}
if ('/n' == *line)
{
*line = '/0';
break;
}
*argv++ = line;
while (*line != '/0' && *line!=' ' && *line!='/t' && *line!='/n')
line++;
}
*argv = '/0';
}
void execute(char** argv)
{
pid_t pid;
int status;
if ((pid = fork()) < 0)
{
}else if (pid == 0)
{
if (execvp(*argv, argv) < 0)
{
printf("ERROR:execvp");
exit(-1);
}
}else
{
while (wait(&status) != pid)
;
}
}
int main(int argc, char* argv[])
{
char cargv[241];
char* cp = cargv;
int i = sizeof(cargv)/MAX_LINE;
char* temp;
struct command_struct cmd;
while (1)
{
printf("%>");
while (i-- && (temp=fgets(cargv, MAX_LINE, stdin)) )
{
temp += strlen(cp);
cp += MAX_LINE;
if (temp < cp)
{
//*temp = '/0';
break;
}
}
parse(cargv, cmd.argv);
if (strcmp(cmd.argv[0], "exit") == 0)
exit(0);
execute(cmd.argv);
}
}
Reference:http://www.csl.mtu.edu/cs4411/www/NOTES/process/fork/exec.html