#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
相关资源:Linux操作系统内核实习