Итак, если вы находитесь в командной строке в среде Windows, вы можете использовать каналы или перенаправления командной строки. Например,
commandThatOutputs.exe > someFileToStoreResults.txt
или
commandThatOutputs.exe | yourProgramToProcessInput.exe
В вашей программе вы можете использовать стандартные функции ввода C для считывания вывода других программ (scanf и т. Д.): http://irc.essex.ac.uk/www.iota-six.co.uk/c/c1_standard_input_and_output.asp. Вы также можете использовать пример файла и использовать fscanf. Это также должно работать в Unix / Linux.
Это очень общий вопрос, вы можете включить больше подробностей, например, какой это тип вывода (просто текст или двоичный файл?) И как вы хотите его обработать.
Редактировать: Ура, уточнение!
Перенаправление STDOUT выглядит проблематично, мне приходилось делать это в .NET, и это доставляло мне всяческие головные боли. Похоже, правильный способ C - порождать дочерний процесс, получать указатель на файл, и внезапно у меня болит голова.
Так вот хак, который использует временные файлы. Все просто, но должно работать. Это будет хорошо работать, если скорость не является проблемой (удар по диску медленный), или если он выбрасывается. Если вы создаете корпоративную программу, лучше всего перенаправить STDOUT, используя то, что рекомендовали другие люди.
#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.
}
Обязательно проверьте права доступа к файлу: сейчас он просто выбросит файл в тот же каталог, что и исполняемый файл. Возможно, вы захотите использовать /tmp
в nix, C:\Users\username\Local Settings\Temp
в Vista или C:\Documents and Settings\username\Local Settings\Temp in 2K/XP
. Я думаю, что /tmp
будет работать в OSX, но я никогда не использовал его.