12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #define _CRT_SECURE_NO_WARNINGS
- #include <windows.h>
- #include <stdlib.h>
- #include <stdio.h>
- 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;
- }
|