Хочу создать прогу, у которой будет два процесса: • Первый процесс источник (source) – он должен читать информацию из файла и записывать ее в канал; • Второй процесс приемник (sink) – получает информацию из канала и записывает ее во второй файл. Главная программа: Код (Text): #include <windows.h> #include <iostream> using namespace std; HANDLE Reader, Writer; int main() { SECURITY_ATTRIBUTES pipeSA; STARTUPINFO scrStartInfo, sinkStartInfo; PROCESS_INFORMATION scrProcessInfo, sinkProcessInfo; pipeSA.nLength = sizeof(SECURITY_ATTRIBUTES); pipeSA.bInheritHandle = TRUE; pipeSA.lpSecurityDescriptor = NULL; if(!CreatePipe(&Reader, &Writer, &pipeSA, 0)) { DWORD dwError = GetLastError(); HANDLE hlocal; BOOL fok = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwError, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), (LPTSTR)&hlocal, 0, NULL); cout << (PCTSTR)hlocal << "\n"; cin.get(); ExitProcess(1); } memset(&scrStartInfo,0,sizeof(STARTUPINFO)); scrStartInfo.cb = sizeof(STARTUPINFO); scrStartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE); scrStartInfo.hStdOutput = Writer; scrStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); scrStartInfo.dwFlags = STARTF_USESTDHANDLES; if(!CreateProcess(NULL, "wpipe.exe", &pipeSA, NULL, NULL, NULL, NULL, NULL, &scrStartInfo, &scrProcessInfo)) { ExitProcess(1); } memset(&sinkStartInfo,0,sizeof(STARTUPINFO)); sinkStartInfo.cb=sizeof(STARTUPINFO); sinkStartInfo.hStdInput = Reader; sinkStartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); sinkStartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE); sinkStartInfo.dwFlags = STARTF_USESTDHANDLES; if(!CreateProcess(NULL, "rpipe.exe", &pipeSA, NULL, NULL, NULL, NULL, NULL, &sinkStartInfo, &sinkProcessInfo)) { ExitProcess(1); } CloseHandle(Reader); CloseHandle(Writer); return 0; } wpipe - процесс для записи в канал: Код (Text): #include <windows.h> #include <stdio.h> #define BUFFSIZE 512 int main() { HANDLE hIn; DWORD dwBytesRead = 10; DWORD dwBytesWritten; BOOL Success; hIn = CreateFile("input.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hIn == INVALID_HANDLE_VALUE) { printf ("CreateFile failed with error %d.\n", GetLastError()); return (1); } char buffer[512]; HANDLE hWrite = GetStdHandle(STD_OUTPUT_HANDLE); for (;;) { Success = ReadFile(hIn, buffer, BUFFSIZE, &dwBytesRead, NULL); if(! Success) return 0; Success = WriteFile(hWrite, buffer, dwBytesRead, &dwBytesWritten, NULL); if(! Success) return 0; } return 0; } и rpipe - процесс для чтения из канала: Код (Text): #include <windows.h> #include <stdio.h> #define BUFFSIZE 512 int main() { HANDLE hOut; DWORD dwBytesRead = 10; DWORD dwBytesWritten; BOOL Success; hOut = CreateFile("output.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if (hOut == INVALID_HANDLE_VALUE) { printf ("CreateFile failed with error %d.\n",GetLastError()); return (1); } char buffer[512]; HANDLE hRead = GetStdHandle(STD_INPUT_HANDLE); for (;;) { Success = ReadFile(hRead, buffer, BUFFSIZE, &dwBytesRead, NULL); if(! Success) return 0; Success = WriteFile(hOut, buffer, dwBytesRead, &dwBytesWritten, NULL); if(! Success) return 0; } return 0; } при этом создаётся просто пустой output.txt. Помогите пожалуйста найти ошибку! ЗЫ а есть что-нибудь посчитать про пайпы кроме msdn?