Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Melaksanakan Proses Kanak-kanak dengan Piped Standard I/O dalam C ?
Meluluskan Parameter I/O Standard kepada Proses Kanak-kanak melalui Paip
Objektifnya adalah untuk mencipta fungsi C yang melaksanakan proses anak (" foo") dengan rentetan yang dibekalkan sebagai input standard ("s") dan mengembalikan output standard kanak-kanak dalam pembolehubah rentetan.
Panggilan Sistem dan Fungsi POSIX
panggilan sistem berikut dan fungsi POSIX diperlukan untuk tugas ini:
Pelaksanaan Fungsi
Fungsi di bawah ikuti langkah-langkah ini untuk melaksanakan proses anak dengan I/O standard paip:
Dalam proses anak:
Dalam proses induk:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #define PIPE_READ 0 #define PIPE_WRITE 1 string f(string s) { int inputPipe[2]; int outputPipe[2]; pid_t childPid; char c; string result; if (pipe(inputPipe) < 0 || pipe(outputPipe) < 0) { perror("Error creating pipes"); return ""; } if ((childPid = fork()) == -1) { perror("Error creating child process"); return ""; } else if (childPid == 0) { // Child process // Redirect standard input if (dup2(inputPipe[PIPE_READ], STDIN_FILENO) < 0) { perror("Error redirecting standard input"); exit(errno); } // Redirect standard output and standard error if (dup2(outputPipe[PIPE_WRITE], STDOUT_FILENO) < 0) { perror("Error redirecting standard output"); exit(errno); } if (dup2(outputPipe[PIPE_WRITE], STDERR_FILENO) < 0) { perror("Error redirecting standard error"); exit(errno); } // Close unused pipes close(inputPipe[PIPE_READ]); close(inputPipe[PIPE_WRITE]); close(outputPipe[PIPE_READ]); // Execute child process execl("/bin/sh", "sh", "-c", s.c_str(), NULL); perror("Error executing child process"); exit(errno); } else { // Parent process // Close unused pipes close(inputPipe[PIPE_READ]); close(outputPipe[PIPE_WRITE]); // Write input string to child's standard input write(inputPipe[PIPE_WRITE], s.c_str(), s.size()); // Read output from child's standard output while (read(outputPipe[PIPE_READ], &c, 1) > 0) { result += c; } // Close pipes close(inputPipe[PIPE_WRITE]); close(outputPipe[PIPE_READ]); // Wait for child to finish waitpid(childPid, NULL, 0); } return result; }
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Proses Kanak-kanak dengan Piped Standard I/O dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!