int main(int argc, char* argv[]) { func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); func_cd(".."); func_exec("dir"); exit(0); }
void executa_comando(struct command_t *cmd) //execução do comando { const char *cmdname = cmd->argv[0]; glob_t *globbuf = (glob_t *) malloc(sizeof(glob_t)); globbuf = expande_glob(cmd); if(strcmp(cmdname,"cd") == 0) func_cd(cmd->argc,cmd->argv); //comandos internos - sem uso do fork() else if(strcmp(cmdname,"pwd") == 0) func_pwd(); if(strcmp(cmdname,"exit") == 0) func_exit(); else{ //uso do fork aqui //pid_t cpid = fork(); int wait_pid; int status; int lastchild; if (cpid < 0) { perror("fork"); exit(127); } else if (cpid > 0) { /* pai */ lastchild = cpid; wait_pid = wait(&status); } else { /* filho */ if(globbuf == NULL) execvp(cmdname, cmd->argv); else execvp(cmdname, globbuf->gl_pathv); perror("exec"); exit(127); } if(wait_pid < 0) perror("wait"); } }