我将创建一个简单的命令解释器,允许用户像在任何命令行中一样输入命令,但在 2 个参数后发生错误



命令行/输出

Enter command: mkdir one
Enter command: touch one/file one/other one/more
Error: Bad address
Enter command: ^Z

C++ 源代码

int main(int argc, char *argv[]){
int rs;
int count = 0;
pid_t pid;
char input[100];
char* temp;
char* arg[6] = { (char*)0, (char*)0, (char*)0, (char*)0, (char*)0, (char*)0 };
               //command    arg1      arg2      arg3      arg4      NULL    
while(true){
    cout << "Enter command: ";
    cin.getline(input, 100);

for( temp = strtok(input, " "); temp; temp = strtok(NULL, " ") )
        {
        arg[count++] = temp;    
        }   
    pid = fork();
    if(pid == -1){
    perror("Error");
    exit(EXIT_FAILURE);
    }
    if(pid == 0){
        /*child process*/
        /*if(count < 2){     
        rs = execlp(arg[0],arg[0],arg[1],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1] << endl;
        }
        else if(count < 3){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << endl;
        }
        else if(count < 4){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],arg[3],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << "arg[3]: " << arg[3] << endl;
        }
        else if(count < 5){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],arg[3],arg[4],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << "arg[3]: " << arg[3]
             << "arg[4]: " << arg[4] << endl;
        }*/
        rs = execvp(arg[0],arg);
        if(rs == -1){
        perror("Error");
        exit(EXIT_FAILURE);
        }
      } 
    else{
        /*parent process*/
    wait(NULL);     
        }
      }//end-while
    }//end program

您可以通过尝试其他路线看到我评论的if-else语句,但根本没有帮助。我认为我的问题是使用 execvp,但我不明白为什么。我感谢任何反馈。

arg[count++]

您需要在执行每个命令后将count重置为 0

相关内容

最新更新