6 Stimmen

system() durch eine nicht-blockierende Funktion ersetzen

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?

12voto

cateof Punkte 6368

Ich denke, dass eine schnelle und schmutzige Aktion darin besteht, sytem(command &) aufzurufen. das & wird den neuen Prozess starten.

8voto

abyx Punkte 65176

Utilice fork() um einen neuen Prozess zu erstellen, und verwenden Sie dann system() (oder jede exec Funktion) enthalten. Der ursprüngliche Prozess kann dann weiter ausgeführt werden.

8voto

bstpierre Punkte 28260

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.

  1. 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 Kindprozess execve() (oder eine verwandte Funktion).

  2. Sie möchten mit einem anderen Programm interagieren. In diesem Fall verwenden Sie popen() .

  3. 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.

  4. 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 dann fork() und verwenden das Dateideskriptorpaar zur Kommunikation. Alternativ können Sie auch über ein Socket, eine Nachrichtenwarteschlange, einen gemeinsamen Speicher usw. kommunizieren.

6voto

Didier Trosset Punkte 34648

Sie können Folgendes verwenden popen . Es erstellt neue Prozesse und ermöglicht es Ihnen, die Prozessausgabe an Ihren eigenen Prozess umzuleiten.

3voto

Ruel Punkte 14969

Unter Windows verwenden Sie die ShellExecute() Funktion aus der Windows-API.

Wenn Sie unter Unix arbeiten, wählen Sie fork() dann system() wie erwähnt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X