command line / output
Enter command: mkdir one
Enter command: touch one/file one/other one/more
Error: Bad address
Enter command: ^Z
c++ source code
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
You can see my commented if-else statements from trying a different route, but did not help at all.I assume my problem is using execvp but I do not understand why. I appreciate any feedback.
arg[count++]
You need to reset count
to 0
after executing each command.