#define _CRT_SECURE_NO_WARNINGS #include #include #include int main() { system("chcp 1251>null"); FILE* input_file = fopen("C:\\Users\\КузьминИВ\\source\\repos\\projectOnCreateProcess\\infEx\\input.txt", "r"); if (input_file == NULL) { printf("Файл для извлечения данных не найден.\n"); return 1; } float a, b, c; if (fscanf(input_file, "%f %f %f", &a, &b, &c) != 3) { printf("Ошибка при чтении коэффициентов\n"); fclose(input_file); return 1; } fclose(input_file); // Формирование строки командной строки char cmdArgs[200]; snprintf(cmdArgs, sizeof(cmdArgs), "C:\\Users\\КузьминИВ\\source\\repos\\projectOnCreateProcess\\x64\\Debug\\projectOnCreateProcess.exe %f %f %f", a, b, c); // Создание канала для перенаправления вывода дочернего процесса HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { printf("Не удалось создать канал.\n"); return 1; } // Настройка структуры для процесса STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.hStdOutput = hWritePipe; // перенаправляем стандартный вывод в канал si.hStdError = hWritePipe; // перенаправляем стандартный вывод ошибок в канал si.dwFlags |= STARTF_USESTDHANDLES; ZeroMemory(&pi, sizeof(pi)); // Создание дочернего процесса if (!CreateProcessA( NULL, // Путь указываем в cmdArgs cmdArgs, // Полный путь с аргументами NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) { printf("Не удалось создать процесс. Код ошибки: %d.\n", GetLastError()); return 1; } // Закрываем ненужный конец канала CloseHandle(hWritePipe); // Чтение из канала и вывод в основной процесс char buffer[256]; DWORD bytesRead; while (ReadFile(hReadPipe, buffer, sizeof(buffer) - 1, &bytesRead, NULL) && bytesRead > 0) { buffer[bytesRead] = '\0'; // завершаем строку printf("%s", buffer); // выводим данные, полученные от дочернего процесса } // Ожидание завершения дочернего процесса WaitForSingleObject(pi.hProcess, INFINITE); DWORD childExitCode; GetExitCodeProcess(pi.hProcess, &childExitCode); printf("\nКод завершения дочернего процесса %d\n", childExitCode); // Освобождение ресурсов CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hReadPipe); return 0; }