PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : execl ignoriert argumente?



g€€k
26-07-2006, 20:19
Hi!

Ich verwende execl, um ein fremdes Programmimage zu laden, aber execl scheint die an das Image zu übergebenden Argumente einfach zu ignorieren.

Snippet:


if((strcmp(cmdBuffer, "launch\n") == 0) && (!child))
{
pid_t pid = fork();
if(pid == -1)
{
printError("Fork error.");
fclose(fStdIn);
return 1;
}
if(pid == 0)
{
execl("/bin/ls", "-l", (char *)0);
printError("Unable to launch process.");
return 1;
}
child = pid;
continue;
}


Im Verzeichnis befinden sich die Textdateien file0.txt und file1.txt.

Resultat:


file0.txt file1.txt


Eigentlich müsste ls -l ja folgendes ausgeben:


total 0
-rw-r--r-- 1 cn cn 0 2006-07-26 20:11 file0.txt
-rw-r--r-- 1 cn cn 0 2006-07-26 20:11 file1.txt



Ich steh da total auf der Leitung, vielleicht kann mir jemand einen guten Rat geben, wie ich das beheben kann.

Danke, CN

g€€k
26-07-2006, 20:45
Ok, gelöst.

Ich hatte mich an der Beschreibung dieser Seite orientiert, weil sie recht kompetent wirkt:

http://www.mleczyk.nofate.com/pliki/LinuxProgramming/ForkExecProcesses.html

Ist sie aber nicht, weil hier steht:


#include <unistd.h>
main()
{
execl("/bin/ls", "-r", "-t", "-l", (char *) 0);
}


Das "-r"-Argument ist falsch platziert. Nach längerer Recherche ist mir schließlich aufgefallen, dass das erste Argument ja der Dateiname sein sollte, execl bzw. ls haben das Argument also nicht ignoriert, sondern nur anders interpretiert...

Joghurt
29-07-2006, 22:16
Das erste (0.) Argument ist immer der Dateiname, mit dem das Programm aufgerufen wurde.