#include #include #include #include #include char **parse(char *line) { char **args= malloc(64 * sizeof(char *)); int i = 0; char *token = strtok(line, " \t\n"); while(token !=NULL) { args[i] = token; i++; token = strtok(NULL, " \t\n"); } args[i] = NULL; return args; } int main() { char line[1024]; while(1) { printf("$"); fflush(stdout); char *result = fgets(line, sizeof(line), stdin); if(result == NULL) return 0; char **parsed = parse(line); if(parsed[0] == NULL) { free(parsed); continue; } pid_t pid = fork(); if(pid == 0) { if(execvp(parsed[0], parsed) == -1 ) { perror("tinysh"); exit(1); } } else if(pid > 0) { wait(NULL); } free(parsed); } }