| STARTUPINFO si; PROCESS_INFORMATION pi; char ReadBuf[100]; DWORD ReadNum; HANDLE hRead; // 管道读句柄 HANDLE hWrite; // 管道写句柄 BOOL bRet = CreatePipe(&hRead, &hWrite, NULL, 0); // 创建匿名管道 if (bRet == TRUE) printf("成功创建匿名管道!\n"); else printf("创建匿名管道失败,错误代码:%d\n", GetLastError()); // 得到本进程的当前标准输出 HANDLE hTemp = GetStdHandle(STD_OUTPUT_HANDLE); // 设置标准输出到匿名管道 SetStdHandle(STD_OUTPUT_HANDLE, hWrite); GetStartupInfo(&si); // 获取本进程的STARTUPINFO结构信息 bRet = CreateProcess(NULL, "Client.exe", NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi); // 创建子进程 SetStdHandle(STD_OUTPUT_HANDLE, hTemp); // 恢复本进程的标准输出 if (bRet == TRUE) // 输入信息 printf("成功创建子进程!\n"); else printf("创建子进程失败,错误代码:%d\n", GetLastError()); CloseHandle(hWrite); // 关闭写句柄 // 读管道直至管道关闭 while (ReadFile(hRead, ReadBuf, 100, &ReadNum, NULL)) { ReadBuf[ReadNum] = '\0'; printf("从管道[%s]读取%d字节数据\n", ReadBuf, ReadNum); } if (GetLastError() == ERROR_BROKEN_PIPE) // 输出信息 printf("管道被子进程关闭\n"); else printf("读数据错误,错误代码:%d\n", GetLastError()); |
| int main(int argc, char* argv[]) { for (int i = 0; i < 100; i++) // 发送一些数据到标准输出和标准错误 { printf("i = %d\n", i); // 打印提示 cout << "标准输出:" << i << endl; // 打印到标准输出 cerr << "标准错误:" << i << endl; // 打印到标准错误 } return 0; } |
关注此文的读者还看过: