execlp mit argumenten
-
und zwar kann ich kein programm starten mit argumenten..
folgendes geht:execlp("./program","./program",NULL);
aber wie übergebe ich argumente?
ich habe ein:
char argument[10];
in dem ein char gesaved ist, aber der aufruf:
execlp("./program","./program",argument);
geht überhaupt nicht, er kehrt also zurück, was ja bei exec nicht so sein sollte.
auch:
execlp("./program",argument,NULL);
geht nicht.
ich habe im internet gesucht nach der definition, und auch die manpage gelesen, aber es geht einfach nicht.
was mach ich falsch?danke euch :xmas1:
-
1. es ist nicht schön, Doppelpost zu schreiben. Unter http://www.c-plusplus.net/forum/viewtopic-var-t-is-200451.html hättest du weiter fragen können.
2. Das hat mit ANSI C nichts zu tun, also im Linux/Unix Forum solltest du solche Fragen stellen.Was heißt "es geht nicht"?
execlp ruft man so auf:
execlp("./program","./program",argument, NULL);
In der man Page wird an vielen Stellen gesagt, dass die Argumenten immer mit einem NULL-Pointer enden müssen (, denn sonst weiß execlp nicht, wie viele Argumente du übergist)
Meine Vermutung, warum es nicht geht sind:
- Das letzte Parameter ist nicht NULL
- ./program kann nicht ausgeführt werden, weil es weder ein Skript noch eine ausführbare Binary ist
- Die Datei ./program gibt es nicht, d.h. du versuchst im falschen Pfad auszuführen.
Mach einfach
execlp("./program","./program",argument); perror("execlp");
Da wirst du die Fehlermeldung sehen, wenn execlp einen Fehler verursacht.
-
ich habe die manpage ja gelesen.
ich sage nochmal, folgendes funktioniert:
execlp("./program","./program", NULL);
folgendes funktioniert NICHT. und damit meine ich, dass er er eben returned, wie in deinem beispiel unten:
execlp("./program","./program",arg, NULL);
arg ist in meinem fall:
char arg[1]; arg[1] = '3';
und das programm ist mit einer "3" als argument eigentlich ausführbar.
-
hdi schrieb:
char arg[1]; arg[1] = '3';
Also das macht bestimmt nicht das, was du willst. Erstens ist das kein wirkliches char Array, was execlp() haben will (zu klein, '\0' fehlt) und zweitens greifst du auf das Array falsch zu. Wenn arg nur ein Zeichen groß ist, kannst du nicht arg[1] auf irgendwas setzen.
char arg[2] = {'3', '\0'}; probier das mal.
-
hdi schrieb:
ich habe die manpage ja gelesen.
aber nicht aufmerksam genug, sonst wäre es dir aufgefallen, dass execlp immer C-Strings will, und
char arg[1]; arg[1] = '3';
ist kein C-String, weil es nicht 0-terminiert ist. Siehe feigligns Lösung.