使用管道实现进程间的通信
2011-05-22 20:16
295 查看
#include <Windows.h> #include <stdio.h> void main() { SECURITY_ATTRIBUTES sa,sb; 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; } sb.nLength = sizeof(SECURITY_ATTRIBUTES); sb.lpSecurityDescriptor = NULL; sb.bInheritHandle = TRUE; if(!CreatePipe(&hInputRead,&hInputWrite,&sb,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; //注意程序a的位置 if(!CreateProcess(NULL,"E://a.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { printf("Error On CreateProcess"); return; } CloseHandle(hInputRead); CloseHandle(hOutputWrite); DWORD dwWritten; char szInPut[10] = "12/r/n21/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); getchar(); }
相关文章推荐
- 使用pipe()与fork()函数通过管道实现父子进程之间的通信
- 使用管道实现两个进程之间的通信
- 【C语言】【unix c】如何使用管道实现两个进程间的通信
- Perl 使用管道实现进程间的通信
- Linux下的有名管道(05)---使用两个管道实现两个进程之间的通信(对讲机模式)
- Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)
- 使用管道实现进程间的双向通信
- Linux进程通信 有名管道实现守护进程
- 使用AIDL实现进程间的通信
- 基础总结篇之四:Service完全解析——使用AIDL实现进程间的通信
- 使用AIDL和远程服务实现进程通信
- 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序
- Android基础--使用AIDL实现进程间的通信之复杂类型传递
- 使用AIDL实现进程间的通信之复杂类型传递
- Android 使用AIDL实现进程间的通信
- WCF实现进程间管道通信Demo分享
- 使用信号实现进程间的通信
- openwrt中使用ubus实现进程通信的原理
- 使用AIDL实现进程间的通信
- 使用AIDL和远程服务实现进程通信