Obtenga la salida de otro proceso utilizando la función del sistema sin usar archivos

Posible duplicado:
La mejor forma de capturar stdout desde un comando del sistema () para que pueda pasar a otra función

Tengo un progtwig en C, en el que invoco una función del sistema, para ejecutar un ejecutable diferente. ¿Cómo obtengo la salida del otro progtwig en la consola y no en un archivo? ¿Se puede hacer algo como esto?

Sí. Usted utiliza tuberías. Cada proceso tiene dos flujos estándar: stdout y stderr. Estos son sólo flujos de IO. Podrían mapearse a archivos, o a consolas de tuberías. Cuando genera el nuevo proceso, establece los nuevos conductos de salida de procesos para redirigir a los manejadores de archivos en el proceso de control. Desde allí puedes hacer lo que quieras. Por ejemplo, podría leer las canalizaciones de procesos secundarios y enviar su salida a las tuberías de salida de los procesos de control.

En Windows lo haces así:

#define SHANDLE HANDLE bool CmdShell::makePipe( SHANDLE& read, SHANDLE& write ) { SECURITY_ATTRIBUTES sa; sa.nLength = sizeof( SECURITY_ATTRIBUTES ); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = true; SHANDLE writeTmp; if ( !CreatePipe( &read, &writeTmp, &sa, 0 )) { assert(0); return false; } if ( !DuplicateHandle( GetCurrentProcess(), writeTmp, GetCurrentProcess(), &write, 0, FALSE, DUPLICATE_SAME_ACCESS )) { assert(0); return false; } CloseHandle( writeTmp ); return true; } 

En Linux lo haces así:

 #define SHANDLE int bool CmdShell::makePipe( SHANDLE& read, SHANDLE& write ) { s32 pipeD[2]; if ( pipe( pipeD )) { assert(0); return false; } read = pipeD[0]; write = pipeD[1]; return true; } 

popen ejecuta otro progtwig y le brinda una interfaz de ARCHIVO * para su salida, de modo que pueda leerlo como si estuviera leyendo un archivo, vea ¿Cómo ejecutar un comando y obtener una salida del comando dentro de C ++ utilizando POSIX?

La pregunta simplemente: “¿Cómo obtengo la salida del otro progtwig en la consola …?”

La respuesta simple es que el otro progtwig escriba a la salida estándar.

Se requieren las respuestas más sofisticadas para pasar la salida del segundo progtwig al primer.