Sie müssen Umleitung und Rohre zu tun, was Sie versuchen zu tun.
Der popen Aufruf kann Ihnen helfen, aber wenn Sie etwas flexibler möchten, wie zum Beispiel die Weiterleitung von Eingaben, oder sicherer, z. B. keine Zeichenfolge in der Shell ausführen, sollten Sie diesem Beispiel folgen Handbuchseite des Rohres.
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
if (argc != 2) {
fprintf(stderr, "Usage: %s <string>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { /* Child reads from pipe */
close(pipefd[1]); /* Close unused write end */
while (read(pipefd[0], &buf, 1) > 0)
write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "\n", 1);
close(pipefd[0]);
_exit(EXIT_SUCCESS);
} else { /* Parent writes argv[1] to pipe */
close(pipefd[0]); /* Close unused read end */
write(pipefd[1], argv[1], strlen(argv[1]));
close(pipefd[1]); /* Reader will see EOF */
wait(NULL); /* Wait for child */
exit(EXIT_SUCCESS);
}
}
Sie sollten das Kind Prozess ändern zu verwenden dup2 die Standardausgabe an das Rohr umgeleitet und dann exec den Befehl Sie es ausgeführt werden sollen.
Dies ist C-Code. Ich wollte C++ sagen, aber dann habe ich FILE * bemerkt. – Dennis
Ich ersetzte Java-Tag zu c, weil der Code in c ist. – AlexR
möglich Duplikat von [Wie kann ich ein externes Programm von C ausführen und seine Ausgabe parsen?] (Http://stackoverflow.com/questions/43116/how-can-i-run-an-external-program-from-c -und-parse-its-output) – GSerg