Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/12/2012, 06:57
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Entrelazar flujos stdout de un proceso con stdin de otro proceso

Abres tu el proceso? Si es asi puedes redireccionar los handles de entrada - salida - error a traves de la struct de informacion de inicio de proceso

Código:
STARTUPINFO si;
SECURITY_ATTRIBUTES sap, sat;

//atributos de seguridad del hilo de ejecucion nulos
sap.nLength = sizeof(SECURITY_ATTRIBUTES);
sap.lpSecurityDescriptor = NULL;
sap.bInheritHandle = 1;

//atributos de seguridad del proceso nulos
sat.nLength = sizeof(SECURITY_ATTRIBUTES);
sat.lpSecurityDescriptor = NULL;
sat.bInheritHandle = 1;

//informacion de inicio
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;//para que acepte los handles de redireccion
si.hStdInput = STDIN;           //estas tres lineas son las que te interesan
si.hStdOutput = STDOUT;
si.hStdError = STDERR;

if(!CreateProcess(ruta, cmdl_args, &sap, &sat, 1, 0, NULL, NULL, &si, &pi))) {
    ...
}
Las tres ultimas lineas del startupinfo son las que definen los handles que usará la aplicacion lanzada, y en este ejemplo solo los he reafirmado (es solo un ejemplo para ver de que va).

Inicias myapp.exe, abres archivos o lo que sea para la redireccion y desde ahi lanzas nodejs.exe con los manejadores redireccionados.

Esto se usa, por ejemplo, en servidores web: recibes una peticion de .php, llamas al interprete de php redireccionando la stdout y stderr a un archivo vacio generado al momento, php escribe en stdout que previamente ha sido redireccionado a un manejador de archivo por que que en verdad escribe sobre el archivo, cuando finaliza el servidor envia el archivo generado.

No te será necesario restablecer las redirecciones porque estaran 'encerradas' en el ambito de ese proceso.

Aqui http://msdn.microsoft.com/en-us/library/ms682499.aspx tienes tambien un manual de msdn para redireccionar manualmente los anejadores de entrada - salida con pipes.

Saludos
vosk