Echtzeitproblem mit system();
-
Hallo zusammen,
kurz und knackig: ich rufe aus einem C-Programm heraus ein anderes Programm auf. Das mach ich mit system(). Das funktioniert soweit auch einwandfrei. Problem ist nur, daß das Echtzeitverhalten meines C-Programms beeinflußt wird. Nun die Frage: "Stoppt" ein Aufruf mit system(extProgramm) mein C-Programm solange bis extProgramm beendet ist? Oder leigt es einfach nur daran, daß mein extProgramm zu rechenintensiv ist(was durchaus sein könnte).
Wenn ersteres der Fall ist, kann man da was dagegen tun? Wenn zweiteres der Fall ist, dann hab ich Pech gehabt!Vielen Dank für Eure Hilfe
Stephan
-
Hallo,
der Aufruf von man: system blockiert dein Programm.
Eine doofe Lösung wäre in den systemaufruf noch ein "&" ans Ende zu schreiben.
Richtige Alternativen wären vermutlich forks+pipes oder andere Systemaufrufe die mir jetzt nicht einfallen.Viele Grüße :xmas1:
-
-
-
Schon mal vielen Dank.
Aber bei exec() bin ich leider auch darauf gestoßen, daß der alte Prozess "überschrieben" wird. Ich denke ich werde ein wenig mit popen() experimentieren. Wobei ich da gerade auf der Suche nach einer Erklärung für das 2. Argument bin.
-
Hat dieselbe Bedeutung wie bei fopen
-
Naja, system macht im Grunde folgendes. Es erzeugt einen neuen Prozess (man: fork), führt dann mit man: execve die Shell (/bin/sh oder die login shell, weiß ich jetzt nicht genau was POSIX da verlangt) aus und übergibt der Shell den String. Die Shell interpretiert dann den String. Dein Programm führt wohl solange ein wait auf diesen Prozess aus.
Im Endeffekt siehst du ist das eine müselige Arbeit (siehe auch FAQ Beitrag in der C++ FAQ zum Thema system (ist glaube ich der letzte auf der 2. Seite)). Also mach lieber selbst fork/execve.