Listing 3: Implementation of WriteToPipe and ReadFromPipe
DWORD CPipedProcess::WriteToPipe(char *command) { DWORD dwWritten; WriteFile(hChildStdinWrDup, command, strlen(command), &dwWritten, NULL); return dwWritten; } DWORD CPipedProcess::ReadFromPipe(CString& chBuf) { DWORD dwRead; char *chBuf_; chBuf.Empty(); if(NULL == (chBuf_ = (char*) calloc(BUFSIZE + 2, sizeof(char)))) { ErrorExit("Not enough memory to read from pipe"); return 1; } /* Read output from child, and write it to buffer */ do { if(!ReadFile(hChildStdoutRd, chBuf_, BUFSIZE, &dwRead, NULL) || dwRead == 0) ErrorExit("Read output from child failed"); *(chBuf_ + dwRead) = '\x0'; chBuf += chBuf_; } while (dwRead >= BUFSIZE); free((char*) chBuf_); return dwRead; } //End of File