Vâng, giả sử bạn đang ở trên một dòng lệnh trong môi trường cửa sổ, bạn có thể sử dụng đường ống hoặc chuyển hướng dòng lệnh. Ví dụ,
commandThatOutputs.exe > someFileToStoreResults.txt
hoặc
commandThatOutputs.exe | yourProgramToProcessInput.exe
Trong chương trình của bạn, bạn có thể sử dụng các chức năng đầu vào tiêu chuẩn C để đọc các chương trình sản xuất khác (scanf, vv): http://irc.essex.ac.uk/www.iota-six.co.uk/c/c1_standard_input_and_output.asp. Bạn cũng có thể sử dụng ví dụ về tệp và sử dụng fscanf. Điều này cũng sẽ hoạt động trong Unix/Linux.
Đây là một câu hỏi rất chung chung, bạn có thể muốn bao gồm thêm chi tiết, như loại đầu ra (chỉ văn bản hoặc tệp nhị phân?) Và cách bạn muốn xử lý.
Chỉnh sửa: Hooray clarification!
Chuyển hướng STDOUT có vẻ phiền toái, tôi phải làm điều đó trong .NET, và nó đã cho tôi tất cả các loại nhức đầu. Có vẻ như cách C thích hợp là để sinh ra một tiến trình con, nhận được một con trỏ tập tin, và tất cả của một đột ngột đầu tôi đau.
Vì vậy, heres một hack sử dụng tệp tạm thời. Nó đơn giản, nhưng nó sẽ hoạt động. Điều này sẽ làm việc tốt nếu tốc độ không phải là một vấn đề (nhấn đĩa chậm), hoặc nếu nó ném đi. Nếu bạn đang xây dựng một chương trình doanh nghiệp, việc xem xét chuyển hướng STDOUT có lẽ là tốt nhất, sử dụng những gì người khác đề xuất.
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE * fptr; // file holder
char c; // char buffer
system("dir >> temp.txt"); // call dir and put it's contents in a temp using redirects.
fptr = fopen("temp.txt", "r"); // open said file for reading.
// oh, and check for fptr being NULL.
while(1){
c = fgetc(fptr);
if(c!= EOF)
printf("%c", c); // do what you need to.
else
break; // exit when you hit the end of the file.
}
fclose(fptr); // don't call this is fptr is NULL.
remove("temp.txt"); // clean up
getchar(); // stop so I can see if it worked.
}
Đảm bảo kiểm tra quyền đối với tệp của bạn: ngay bây giờ điều này sẽ chỉ đơn giản là ném tệp vào cùng thư mục với tệp exe. Bạn có thể muốn xem xét sử dụng /tmp
trong nix hoặc C:\Users\username\Local Settings\Temp
trong Vista hoặc C:\Documents and Settings\username\Local Settings\Temp in 2K/XP
. Tôi nghĩ rằng /tmp
sẽ hoạt động trong OSX, nhưng tôi chưa từng sử dụng nó.
cũng thấy http://stackoverflow.com/questions/125828/capturing-stdout-from-a-system-command-optimally – rogerdpack
Nếu bạn muốn stderr cũng như bạn có thể chuyển hướng, ví dụ gọi ls nonexistant-name 2> & 1 – Vic
Đây không phải là một bản sao; câu hỏi được liên kết là ** C++ cụ thể **, trong khi câu hỏi này là khoảng ** C **. –