重定向控制台程序的输入输出

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

// 重定向控制台程序的输入输出主程序代码

#include "Windows.h"

#include "stdio.h"

void main()

{

SECURITY_ATTRIBUTES sa,sa2;

HANDLE hInputRead,hInputWrite;

HANDLE hOutputRead,hOutputWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);

sa.lpSecurityDescriptor = NULL;

sa.bInheritHandle = TRUE;

if (!CreatePipe(&hOutputRead,&hOutputWrite,&sa,0))

{

printf("Error On CreatePipe1");

return;

}

sa2.nLength = sizeof(SECURITY_ATTRIBUTES);

sa2.lpSecurityDescriptor = NULL;

sa2.bInheritHandle = TRUE;

if (!CreatePipe(&hInputRead,&hInputWrite,&sa2,0))

{

printf("Error On CreatePipe2");

return;

}

STARTUPINFO si;

PROCESS_INFORMATION pi;

si.cb = sizeof(STARTUPINFO);

GetStartupInfo(&si);

si.hStdError = hOutputWrite;

si.hStdOutput = hOutputWrite;

si.hStdInput = hInputRead;

si.wShowWindow = SW_HIDE;

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

DWORD dwWritten;

if (!CreateProcess(NULL,"E:\\and.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

{

printf("Error On CreateProcess");

return;

}

CloseHandle(hInputRead);

CloseHandle(hOutputWrite);

char szInPut[10] = "12\r\n 34\r\n";// 输入

WriteFile(hInputWrite, szInPut, strlen(szInPut), &dwWritten, NULL);

char buffer[4096] = {0};

DWORD bytesRead;

while (true)

{

if(ReadFile(hOutputRead,buffer,4095,&bytesRead,NULL) == NULL)

{

break;

}

printf(buffer);// 输出

Sleep(500);

}

CloseHandle(hInputWrite);

CloseHandle(hOutputRead);

}

//测试用and.exe的代码

/*

#include "stdio.h"

void main()

{

int x,y;

printf("Input First Num:\r\n");

scanf( "%d", &x );

printf("Input Second Num:\r\n");

scanf( "%d", &y );

printf("%d + %d = %d\r\n",x,y,x+y);

}

*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航