execvp und Benutzereingabe
-
Hallo,
ich sitze hier vor einem Problem. Leider habe ich mich schon lange nicht mehr mit C++ beschäftigt.
Nun muss ich mich wieder, wegen Studiums, damit beschäftigen.
Aufgabe:
Wir sollen ein Kommando Interpreter schreiben. Eine Shell.Codevorgabe:
void read_command(char *com, char **par){ fprintf(stdout, "$ "); ..... return; } int main(){ int childPid; int status; char command[20]; char *parameters[60]; while (1) { read_command(command, parameters); if ((childPid = fork()) == -1) { fprintf(stderr,"can't fork\n"); exit(1); } else if (childPid == 0) { /* child */ execvp(command, parameters); exit(0); } else { /* parent process */ wait(&status); } } }
Nun habe ich die read_command Funktion ergänzt mit:
fprintf(stdout, "$ "); scanf("%c", com); return;
gebe ich z.B. ls als Befehl ein führt er nur l aus. Also immer nur das erste Zeichen.
Dann hatte ich gedacht, dann probiere ich es mit getline:
cin.getline(com, sizeof(com))
Leider auch das selbe Ergebnis.
Was mache ich falsch?
Vielen vielen Dank für dir Hilfe!
Gruß
Dragon
-
cin.getline scheint zum teil zu funktionieren, solange ich nur einen befehl wie ls eingebe.
Kann mir jemand verraten wie ich das mit den parametern handeln kann?
Also wenn ich z.B. "mkdir test" eingebe das die eingabe in Befehl und Parameter zerlegt wird.Mit cin.getline scheint mein Ansatz nicht richtig zu sein oder?
NACHTRAG:
"strtok" führte zum Erfolg.