编写一个基本的shell解释器,将命令发送到其他终端

时间:2016-10-27 21:34:07

标签: linux shell terminal fork exec

我的目标是编写一个程序,用户输入一个系统命令,我的代码接受该命令并在另一个终端窗口中运行它,而不会锁定用户输入命令的终端。

现在,我所拥有的是读取命令的代码,fork() pocess并将命令作为子进程执行。

这是主要的shell解释器:

//argv[1] is the path for the command runner binary
int main(int argc, char const *argv[]){
  char cmd[512];
  pid_t childPID;

  while(1){
      cout << "Enter the command line: ";
      //reads command from user
      cin.getline(cmd, 512,'\n'); 

      //fork the current parent process 
      childPID = fork();            
      cout << "childPID = " << childPID;

      if(childPID == 0){
          //starts a execution of the command runner, passing the user command as argument
          execl(argv[1],argv[1],cmd, (char *) 0); 
      }
      else{
          cout<<"Error on forking parent"<<endl;
      }
  }
  return 0;
}

这是命令执行程序,它留在另一个文件中,为用户输入的每个命令调用:

int main(int argc, char const *argv[]){
  system(argv[1]); //runs system command
  cout << endl;
  cout << "Press enter to continue...";
  cin.get();
  return 0;
}

我遇到的问题是,我无法找到一种方法来打开执行另一个终端的命令。另一件事是循环一次跳两次,我认为这是一个糟糕的实现。

0 个答案:

没有答案