void RunCmd(commandT** cmd, int n) { int i; total_task = n; if (n == 1) { RunCmdFork(cmd[0], TRUE); ReleaseCmdT(&cmd[0]); } else { RunCmdPipe(cmd[0], &cmd[1], n - 1, -1); for (i = 0; i < n; i++) { ReleaseCmdT(&cmd[i]); } } }
void RunCmd(commandT** cmd, int n) { int i; int count; total_task = n; //printf("Command name: %s \n",cmd[0]->argv[0]); //printf("Command argument count: %d \n",cmd[0]->argc-1); if (IsAlias((cmd[0]->argv[0]))) { RunAlias((cmd[0])); } else { for ( count=1;count<cmd[0]->argc;count++){ //printf("Argument %d : %s \n",count,cmd[0]->argv[count]); } if(n == 1) RunCmdFork(cmd[0], TRUE); else{ RunCmdPipe(cmd[0], cmd[1]); for(i = 0; i < n; i++) ReleaseCmdT(&cmd[i]); } } }
/*Try to run an external command*/ static void RunExternalCmd(commandT* cmd, bool fork) { // printf("---------------------In RunExternalCmd------------------------\n"); //bg,fg,cd if (strcmp(cmd->argv[0],"fg") ==0 ){ GetBgpToFg(cmd); return; } if (strcmp(cmd->argv[0],"bg") == 0){ RunCmdBg(cmd); return; }else if(strcmp(cmd->argv[0],"jobs") == 0){ Printjoblist(); return; } if (ResolveExternalCmd(cmd)){ Exec(cmd, fork); } else { printf("%s: command not found\n", cmd->argv[0]); fflush(stdout); ReleaseCmdT(&cmd); } // printf("---------------------out RunExternalCmd------------------------\n"); }
void RunCmd(commandT** cmd, int n) { int i; total_task = n; // checkAlias(cmd,n); if ((*cmd)->is_redirect_out) { (*cmd)->is_redirect_out = 0; RunCmdRedirOut(*cmd, (*cmd)->redirect_out); } else if ((*cmd)->is_redirect_in) { (*cmd)->is_redirect_in = 0; RunCmdRedirIn(*cmd, (*cmd)->redirect_in); } else if(n == 1) RunCmdFork(cmd[0], TRUE); else{ RunCmdMultiPipe(cmd,n); for(i = 0; i < n; i++) ReleaseCmdT(&cmd[i]); } }
/*Try to run an external command*/ static void RunExternalCmd(commandT* cmd, bool fork) { if (ResolveExternalCmd(cmd)){ Exec(cmd, fork); } else { printf("%s: command not found\n", cmd->argv[0]); fflush(stdout); ReleaseCmdT(&cmd); } }
void RunCmd(commandT** cmd, int n) { int i; total_task = n; if(n == 1){ RunCmdFork(cmd[0], TRUE); }else{ RunCmdPipe(cmd[0], cmd[1]); //Qest: only two task allowed ? for(i = 0; i < n; i++) ReleaseCmdT(&cmd[i]); } }
void RunCmd(commandT** cmd, int n) { // printf("in RunCmd\n"); int i; total_task = n; // fprintf(stdout, "Name: %s\n", cmd[0]->name); // fprintf(stdout, "cmdLine: %s\n", cmd[0]->cmdline); if(n == 1) RunCmdFork(cmd[0], TRUE); else{ RunCmdPipe(cmd[0], cmd[1]); for(i = 0; i < n; i++) ReleaseCmdT(&cmd[i]); } }
void RunCmd(commandT** cmd, int n) { int i; total_task = n; if(n == 1) { if ((cmd[0]->is_redirect_in) || (cmd[0]->is_redirect_out)) { RunCmdRedirInOut(cmd[0]); } else { RunCmdFork(cmd[0], TRUE); } } else { RunCmdPipe(cmd[0], cmd[1]); for(i = 0; i < n; i++) ReleaseCmdT(&cmd[i]); } }
/**************Implementation***********************************************/ void RunCmd(commandT** cmd, int n, int fd_in, int fd_out) { int i; int fd[2]; fd[0] = fd_in; for (i = 0; i < n; i++) { cmd[i]->fd_in = fd[0]; if (i != n-1) { if (pipe(fd) == -1) { perror("pipe error in RunCmd"); } cmd[i]->fd_out = fd[1]; } else { cmd[i]->fd_out = fd_out; } if (cmd[i]->argc > 0) { if (InterpretAlias(alist, cmd[i]->argv[0])) { int j; char* rcmd = NULL; char* realcmd = (char*)malloc(sizeof(char) * 1024); for (j = 0; j < cmd[i]->argc; j++) { rcmd = InterpretAlias(alist, cmd[i]->argv[j]); strcat(realcmd, " "); if (rcmd) { strcat(realcmd, rcmd); } else { strcat(realcmd, cmd[i]->argv[j]); } } int taskNum = 0; commandT** aliasCmd = Interpret(realcmd, &taskNum); RunCmd(aliasCmd, taskNum, cmd[i]->fd_in, cmd[i]->fd_out); } else if (IsBuiltIn(cmd[i]->argv[0])) { RunBuiltInCmd(cmd[i]); } else { RunExternalCmd(cmd[i], TRUE); } } ReleaseCmdT(&cmd[i]); } free(cmd); }