Bạn cần sử dụng chuyển hướng và đường ống để thực hiện những gì bạn đang cố gắng làm.
Gọi số popen có thể giúp bạn, nhưng nếu bạn muốn điều gì đó linh hoạt hơn, chẳng hạn như chuyển hướng đầu vào hoặc an toàn hơn, chẳng hạn như không chạy chuỗi trong trình bao, bạn nên làm theo ví dụ này, lấy từ trang hướng dẫn sử dụng ống.
#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);
}
}
Bạn nên sửa đổi quy trình con để sử dụng dup2 để chuyển hướng đầu ra tiêu chuẩn tới đường ống và sau đó thực thi lệnh bạn muốn chạy.
Đây là mã C. Đã định nói C++ nhưng sau đó tôi nhận thấy FILE *. – Dennis
Tôi đã thay thế thẻ java thành c vì mã nằm trong c. – AlexR
có thể trùng lặp của [Làm thế nào tôi có thể chạy một chương trình bên ngoài từ C và phân tích đầu ra của nó?] (Http://stackoverflow.com/questions/43116/how-can-i-run-an-external-program-from-c -and-parse-its-output) – GSerg