命令行/输出
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
。