Bueno, suponiendo que está en una línea de comando en un entorno de Windows, puede utilizar las canalizaciones o los redireccionamientos de línea de comando. Por ejemplo,
commandThatOutputs.exe > someFileToStoreResults.txt
o
commandThatOutputs.exe | yourProgramToProcessInput.exe
Dentro de su programa, usted podría utilizar las funciones de entrada estándar de C para leer la otra salida de programas (scanf, etc.): http://irc.essex.ac.uk/www.iota-six.co.uk/c/c1_standard_input_and_output.asp. También puede usar el ejemplo de archivo y usar fscanf. Esto también debería funcionar en Unix/Linux.
Esta es una pregunta muy genérica, es posible que desee incluir más detalles, como qué tipo de salida es (solo texto o un archivo binario) y cómo desea procesarla.
Editar: ¡Aclaración de Hooray!
Redireccionando STDOUT parece ser problemático, he tenido que hacerlo en .NET, y me dio todo tipo de dolores de cabeza. Parece que la forma correcta de C es engendrar un proceso secundario, obtener un puntero a un archivo y, de repente, me duele la cabeza.
Aquí hay un truco que usa archivos temporales. Es simple, pero debería funcionar. Esto funcionará bien si la velocidad no es un problema (golpear el disco es lento), o si es desechable. Si está creando un programa empresarial, probablemente sea mejor investigar la redirección STDOUT, utilizando lo que otras personas recomendaron.
#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.
}
Asegúrese de revisar sus permisos de archivos: en este momento esto va a lanzar simplemente el archivo en el mismo directorio que un exe. Es posible que desee examinar el uso de /tmp
en nix, o C:\Users\username\Local Settings\Temp
en Vista, o C:\Documents and Settings\username\Local Settings\Temp in 2K/XP
. Creo que el /tmp
funcionará en OSX, pero nunca he usado uno.
ver también http://stackoverflow.com/questions/125828/capturing-stdout-from-a-system-command-optimally – rogerdpack
Si también desea stderr, puede redirigir, por ejemplo, llamar a ls nonexistant-name 2> & 1 – Vic
Esto no es un duplicado; la pregunta vinculada es ** específica de C++ **, mientras que esta pregunta es acerca de ** C **. –