Ich möchte system() nicht in meinem C-Programm verwenden, weil system(3) blockiert und das ist nicht das, was ich will. Was ist der optimale Weg, dies zu tun?
Antworten
Zu viele Anzeigen?Die Antwort hängt davon ab, was Ihr eigentliches Ziel ist. Sie sagen nicht, auf welcher Plattform Sie arbeiten, und ich weiß nur sehr wenig über Windows, so dass ich mich hier nur auf Ihre Optionen unter Linux/Unix beschränke.
-
Sie wollen nur ein anderes Programm starten und müssen nicht mit ihm interagieren. In diesem Fall, rufen Sie
fork()
und führen Sie dann im Kindprozessexecve()
(oder eine verwandte Funktion). -
Sie möchten mit einem anderen Programm interagieren. In diesem Fall verwenden Sie
popen()
. -
Sie möchten, dass ein Teil Ihres Programms als Unterprozess läuft. In diesem Fall verwenden Sie
fork()
und rufen Sie die Funktionen auf, die Sie in dem untergeordneten Programm ausführen müssen. -
Sie müssen mit einem Teil Ihres Programms interagieren, das als Unterprozess läuft. Rufen Sie auf.
pipe()
damit Sie einen Dateideskriptor haben, über den Sie kommunizieren können, rufen Sie dannfork()
und verwenden das Dateideskriptorpaar zur Kommunikation. Alternativ können Sie auch über ein Socket, eine Nachrichtenwarteschlange, einen gemeinsamen Speicher usw. kommunizieren.