通过C Shell Linux

时间:2018-02-17 17:42:18

标签: c pipe

当我识别管道时,这是我在main中调用的函数

void execArgsPiped(char* input)
{
char* parsedpipe[MAXCOM];
parsePipe(input,parsedpipe);
pid_t pid;
int in, fd [2];
int i= 0;
in = STDIN_FILENO;
while(i<nCommands-1)
{
  pipe (fd);
    char *toEx[100];
    parseSpace(parsedpipe[i],toEx);
    if(i!=nCommands-1)
        spawn_proc (in, fd [1], toEx);
  close(fd [1]);
  in = fd [0];
  i++;
  }
  if (in != 0)
  dup2 (in, 0);
  char *toEx1[100];
  parseSpace(parsedpipe[i],toEx1);
  printf(" command %i is %s \n",i,parsedpipe[1]);
  if (execvp(toEx1[0], toEx1) < 0) {
        printf("\nCould not execute command..");
    }

这里是对函数的调用,该函数生成执行命令的过程

void spawn_proc (int in, int out, char **toEx)
{
  pid_t pid;
  pid = fork();
  if (pid < 0)
    {
    printf("error creating process");
    }
    else if(pid==0){  
      if (in != 0)
        {
          dup2 (in, 0);
          close (in);
      }
      if (out != 1)
      {
        printf("the if 12");
        dup2 (out, 1);
        close (out);
      }
      if (execvp(toEx[0], toEx) < 0) {
        printf("\nCould not execute command..");
      }
  }
  else{
  wait(NULL);
  }
}

我的问题是,当我编译并插入两个通过管道连接的命令时,Shell会进入一种无限循环,因此我必须关闭终端。

我真的无法理解代码有什么问题,我对C不太了解。

非常感谢任何帮助。

0 个答案:

没有答案