Befehlszeile/AusgabeIch bin einen einfachen Befehlsinterpreter zu erstellen, die Benutzer der Eingabe von Befehlen wie in jeder Befehlszeile ermöglicht, aber Fehler treten nach 2 Argumenten
Enter command: mkdir one
Enter command: touch one/file one/other one/more
Error: Bad address
Enter command: ^Z
C++ Quellcode
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
Sie können sehen, meine kommentierte if-else Aussagen von einem anderen Weg versuchen, aber überhaupt nicht geholfen.Ich nehme an, mein Problem ist mit execvp, aber ich verstehe nicht warum. Ich freue mich über jede Rückmeldung.
Es hat funktioniert! Ich fing an, verrückt zu werden und überschätzte, was getan werden musste. Vielen Dank! – Xenu