Hallo Jürgen, helfen kann ich dir da leider nicht, habe nur ein paar Anmerkungen dazu Am 13.12.2014 um 18:59 schrieb Jürgen Hochwald:
Hallo,
ich habe momentan ein Problem mit einem selbst erstellen C++-Programm, wo ich momentan nicht richtig weiter komme ().
Es geht um den system()-Aufruf, um aus dem Programm heraus eine anderen Befehl auszuführen. Das ganze passiert in einer Schleife, wo mehrere Aufrufe nacheinander erfolgen.
sprintf(Cmd,"echo \"convert %s_.ppm %s.jpg\" >> test",BaseFileName,BaseFileName); system(Cmd);
Das Problem ist, daß der Aufruf genau 8 mal korrekt gemacht wird (Rückgabe 0), und alle weitere Aufrufe schlagen fehl (Rückgabe -1). Das Wird der Aufruf eigentlich ausgeführt und ist nur der Returnwert falsch oder scheitert der Aufruf komplett.
Ich frage deshalb, weil mich selber ne ganze Weile der system() Aufruf bei einem anderen Programm (XBMC, jetzt KODI) genervt hat. Der Aufruf brachte stets einen Fehler, obwohl das externe Programm (in diesem Fall ein Bash-Skript) korrekt ausgeführt wurde. Mittlerweile brauche ich diesen Teil nicht mehr, deshalb hab ich das nicht weiter verfolgt. Hinzu kommt, dass meine Kenntnisse in C++ Programmierung nicht gerade berauschend sind :-(
Ganze passiert nur in der Komplexität des gesamten Programms (wo ich nicht näher 'dauf eingehen will, da zu kompliziert. Grob geht es um eine Mandelbrot-Bildergallerie, wo auch die Bildparameter per GMP rekursiv verarbeitet werden, um einen klickbaren Zoom zu bekommen). Mach ich eine einfache for()-Schleife funktioniert das problemlos. Das Problem muß also mit dem Geraffel darum zusammen hängen. Tja, da wirst Du dann wohl auch keine weitere Hilfe hier bekommen
Um überhaupt einen Ansatzpunkt zu bekommen, versuche ich heraus zu bekommen, welcher Fehler bei dem system()-Aufruf passiert. Die Auswertung von 'errno' liefert -12, was 'out of memory' bedeutet, sofern errno überhaupt durch system() gesetzt wird. Kann ich mir aber nicht vorstellen, die Kiste hat 8Gb und es läuft nichts speicherfressendes (kinfocenter zeigt 73% freier physischer Speicher an).
man system sagt auch nix über gesetzte errno Variablen Ich hab da mal einem anderen Forum folgende Aussage gesehen "Ansonsten gilt: wenn möglich, nie system verwenden, sondern die Sache mit Linux-Systemaufrufen erledigen...", allerdings wurde nicht begründet warum Gruß Manfred -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org