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

类别:编程语言 点击:0 评论:0 推荐:
// 重定向控制台程序的输入输出主程序代码 #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); } */

本文地址:http://com.8s8s.com/it/it22950.htm