Ausführen eines untergeordneten Prozesses mit Piped Stdin/Stdout unter Linux
Unter Linux erfordert das Ausführen eines untergeordneten Prozesses mit Pipedstdin/Stdout eine Kombination aus Linux-Systemaufrufe oder POSIX-Funktionen. Um dies zu erreichen, verwenden wir die folgenden Techniken:
Unten ist ein C-Beispiel, das diese Techniken implementiert:
#include <iostream> #include <unistd.h> #include <stdlib.h> using namespace std; int main() { // Input string string s = "Hello, world!"; // Create pipes for stdin and stdout int stdinPipe[2], stdoutPipe[2]; pipe(stdinPipe); pipe(stdoutPipe); // Fork a child process int pid = fork(); if (pid == 0) { // Child process // Redirect stdin and stdout to pipes dup2(stdinPipe[0], STDIN_FILENO); // Read from pipe dup2(stdoutPipe[1], STDOUT_FILENO); // Write to pipe // Close unused file descriptors close(stdinPipe[1]); close(stdoutPipe[0]); // Execute "foo" with piped stdin execlp("foo", "foo", NULL); // Exit child process on failure exit(1); } else if (pid > 0) { // Parent process // Close unused file descriptors close(stdinPipe[0]); close(stdoutPipe[1]); // Write to stdin pipe write(stdinPipe[1], s.c_str(), s.length()); close(stdinPipe[1]); // Read from stdout pipe char buffer[256]; int bytesRead = 0; string output; while ((bytesRead = read(stdoutPipe[0], buffer, sizeof(buffer))) > 0) { output.append(buffer, bytesRead); } close(stdoutPipe[0]); // Print output string cout << output << endl; } return 0; }
Dieser Codeausschnitt:
Das obige ist der detaillierte Inhalt vonWie führe ich einen untergeordneten Prozess mit Piped Stdin/Stdout unter Linux aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!