首页 >> 电子商务大学 >> 网站建设班 >> NET区
 
重定向控制台程序的输入输出



// 重定向控制台程序的输入输出主程序代码 #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); } */


1
 
电子商务大学版权与免责声明:

 
凡本网注明“来源:35DX”的所有作品,版权均属于电子商务大学,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:电子商务大学”。违反上述声明者,本网将追究其相关法律责任。
凡本网注明“来源:XXX(非电子商务大学)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,同时,本站转载并无任何商业目的。
如因作品内容、版权和其它问题需要同本网联系的,请在30日内进行。
联系方式:电子商务大学 webMaster@35dx.com