Hannibal Smith Geschrieben 18. Oktober 2008 Teilen Geschrieben 18. Oktober 2008 Schönen Nachmittag! Ich hab ein kleines Problem bei einem C Programm. Vereinfacht: int main(int argc, char **argv) { int i; for(i=0;i { execlp("./Program1","Program1",NULL); printf("%i\n", i); } return 0; } Ich versteh nicht wiso "Program1" nur einmal ausgeführt wird, und der ganze Code danach nicht mehr berücksichtigt wird. Im Program1 steht nur das es ein Hello World ausgeben soll. Hat das mit der Endbedingung, dem NULL am ende des execlp Befehls zu tun? Lg Johannes Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
roots Geschrieben 18. Oktober 2008 Teilen Geschrieben 18. Oktober 2008 Nö der null-pointer am Schluss sollte schon passen, was liefert denn execlp als Rückgabewert? Und was macht program1 überhaupt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
krusher Geschrieben 18. Oktober 2008 Teilen Geschrieben 18. Oktober 2008 ich kann zwar absolut nimmer c programmieren, aber ein bissi googlen (sitz grad in der firma, da hat man zeit für solche scherze) hat folgendes ergebnis gebracht: The list of arguments must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL. (quelle: http://linux.die.net/man/3/execlp) jetzt die vermutung (wie gesagt, ich hab seit mindestens 10 jahren kein c mehr programmiert): alles, was da irgendwie noch an code kommt, wird als input für dein Program1 aufgefasst. hth Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
NorwegianBlue Geschrieben 18. Oktober 2008 Teilen Geschrieben 18. Oktober 2008 auch bei mir ist die C-Zeit schon lange her, aber wenn mich nicht alles täuscht, wird mit exec der aktuelle Prozess gegen den aufgerufenen ausgetauscht - klar dass dann die Progammteile nach exec nicht mehr ausgeführt werden. Mit "fork" kannst eine Kopie des aktuellen Prozesses machen und dann aus dem fork return value entscheiden ob Du jetzt das Original oder die Kopie bist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R.C. Geschrieben 18. Oktober 2008 Teilen Geschrieben 18. Oktober 2008 Norwegian hat Recht. Die ganzen 'exec*'-Funktionen 'tauschen' den gerade laufenden Prozess gegen den aufgerufenen aus http://www.opengroup.org/onlinepubs/009695399/functions/exec.html. Eine gute Quelle fuer die ganzen Standard-C und POSIX Funktionen ist die OpenGroup: http://www.opengroup.org/onlinepubs/009695399/ Funktionierender Code (aja, ich habe ihn nicht compiled, also keine Garantien wuerde so aussehen: #include #include int main (void) { size_t i; for (i = 0; i { pid_t process_id = fork (); /* Fehlerhandling */ if (process_id == 0) /* bin im Kindprozess */ { execlp("./Program1","Program1",NULL); } else /* bin im urspruenglichen Prozess */ { printf ("%lu\n", i); } } return EXIT_SUCCESS; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hannibal Smith Geschrieben 18. Oktober 2008 Autor Teilen Geschrieben 18. Oktober 2008 Danke euch allen ich habs bereits, Norwegians Tip war Gold wert. R.C. danke auch dir, ich habs nur zu spät gesehen und hab mich stattdessen selber bissl gequält. int main(int argc, char **argv) { int i; int pid; int status; for(i=0;i { pid=fork(); switch(pid) { case 0: execlp("./fork_exec","./fork_exec",NULL); break; default: pid=wait(&status); } } return 0; } Edit: Sry für die scheiss Code-form, gehört sich nicht so. Edit2: so jetzt isses besser Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R.C. Geschrieben 19. Oktober 2008 Teilen Geschrieben 19. Oktober 2008 R.C. danke auch dir, ich habs nur zu spät gesehen und hab mich stattdessen selber bissl gequält. War eh besser, ich habe ja auf's 'wait' vergessen, dadurch war's ein Zombiegenerator :f: Allerdings sollte dein 'pid' ein 'pid_t' sein, ist zwar normalerweise ein int, kann aber bei 64Bit System auch ein long (bzw. long long) sein. In echtem Code solltest du auch noch einen Fehlerstatus (Returnwert von -1) bei 'fork', 'execlp' und 'wait' abfragen, ist bei deinem Beispiel aber eh egal, weil wenn 'fork' fehlschlaegt 'wait' mit einem Fehlerstatus zurueckkehrt und nichts passiert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hannibal Smith Geschrieben 19. November 2008 Autor Teilen Geschrieben 19. November 2008 wusste doch wiso ich so einen allgemeinen Threadtitel geählt hab... Frage: hat schon mal wer mit der opencv libary gearbeitet, wenn ja: ist es möglich mit der auch in einer C++ Windows Forms Anwendung damit zu arbeiten, ich schaffs nur in einer Konsolenanwendung zur zeit Ich bekomm immer den Fehler: Fehler 1 fatal error C1189: #error : ERROR: EMM intrinsics not supported in the pure mode! C:\Program Files\Microsoft Visual Studio 9.0\VC\include\emmintrin.h 27 sectry und kann damit nüsse anfangen... Wer sich da a bissl auskennt den schick ich gerne das .NET Projekt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast eleon Geschrieben 19. November 2008 Teilen Geschrieben 19. November 2008 ist zwar off-topic weil java aber vielleicht hilfts ja doch bei manchen "routinen" http://www.suntsu.ch/serendipity/uploads/getStringFromObj.jpg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Das_Viech Geschrieben 19. November 2008 Teilen Geschrieben 19. November 2008 *bruhaha* das hat style Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.