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]);
    }
  }
}
Exemple #2
0
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]);
    }
  }
}
Exemple #3
0
/*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");
}
Exemple #4
0
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);
  }
}
Exemple #6
0
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]);
  }
}
Exemple #7
0
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]);
      		}
	}
Exemple #9
0
/**************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);
}