Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 41
1

Создание двух процессов

10.09.2019, 19:46. Просмотров 644. Ответов 0
Метки нет (Все метки)

// Нужно создать два процесса(родительский и дочерний). Родительский есть, понятия не имею как сделать дочерний
/* Все задание:
Процесс Parent:
1. Создаёт бинарный файл, записи которого имеют следующую структуру:

struct emp
{
int num; // номер зачётки
char fam[30]; // фамилия студента
char first_name[30]; // имя студента
char second_name[30]; // отчество студента
double grade; // средний бал
};

Имя файла и данные о студентах вводятся с консоли.
2. Выводит созданный файл на консоль.
3. Запрашивает с консоли номер зачётки, фамилию, имя и отчество студента и
новый средний бал этого студента.
4. Формирует командную строку, которая содержит имя созданного файла и
информацию, полученную в пункте 3.
5. Запускает дочерний процесс Child, которому как параметр передаётся командная
строка, сформированная в пункте 4.
6. Ждёт завершения работы процесса Child.
7. Выводит откорректированный файл на консоль.
8. Завершает свою работу.

Процесс Child:
1. Выводит на консоль информацию, полученную через командную строку.
2. Корректирует в файле, созданном процессом Parent, нужную запись, т.е.
устанавливает новый средний бал студента.
3. Завершает свою работу.
*/
//Что получилось у меня:
#include <conio.h>
#include <stdio.h>
#include <Windows.h>
#include <cstring>
#include <string.h>
#include <fstream>
#include <iostream>
#include <locale.h>
#define MAXAUTL 31
#define MAXBKS 100
#define STOP ""

using namespace std;

char* s_gets(char* st, int n);
void input(int count); void output(int count);
//void chang(int pos);

struct emp
{
int num; // номер зачётки
char fam[MAXAUTL]; // фамилия студента
char first_name[MAXAUTL]; // имя студента
char second_name[MAXAUTL]; // отчество студента
float grade; // средний бал
}a[MAXBKS];

int main(void)
{

system("cls");
setlocale(LC_ALL, "Russian");
ofstream f;
int count = 0;
f.open("D:\\Parent.dat", ios::binary);

///////////////////////////////Child////////////////////////
wchar_t lpszAppName[] = L"ConsoleProcessChild.exe";
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// создаем новый консольный процесс
if (!CreateProcess
(
lpszAppName,//ошибка, если не переименовать в "ConsoleProcessCount.exe"
NULL,
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
)
)
{
wprintf(L"The new process is not created.\n");
wprintf(L"Check a name of the process.\n");
wprintf(L"Press any key to finish.\n");
getch();
return 0;
}

wprintf(L"The new process is created.\n");
////////////////////////////////////////////////////////////////////////

//////////////////////Parent////////////////////////////////////////////
count++;
input(count);
f.write(reinterpret_cast<char*>(&a), sizeof(a));
if (!f)
cout << "Информация не записана" << endl;
else
cout << "Информация записана" << endl;
f.close();
if (count > 0)
{
output(count);
}
else
cout << "Нет записей" << endl;
cout << "1 - корректировка" << endl;
////////////////////////////////////////////////////////////////////////



system("pause");
}

int index;
void input(int count)
{
system("cls");
printf("Введите фамилию:\n");
printf("Нажмите <Enter> в начале строки для останова.\n");
while (strcmp(s_gets(a[count].fam, MAXAUTL), STOP) != 0 && count < MAXBKS)
{

printf("Введите имя:\n");
s_gets(a[count].first_name, MAXAUTL);
printf("Введите отчество:\n");
s_gets(a[count].second_name, MAXAUTL);
printf("Введите номер зачетки:\n");
scanf("%d", &a[count].num);
printf("Введите оценку:\n");
scanf("%f", &a[count++].grade);
while (getchar() != '\n');
if (count < MAXBKS)
printf("Фамилия следующего:\n");
}

}
void output(int count)
{
printf("Каталог студентов:\n\n");
for (index = 1; index < count; index++)
{
printf("\nСтудент: %d \n\n", index);
printf("Фамилия: %s \n", a[index].fam);
printf("Имя: %s \n", a[index].first_name);
printf("Отчество: %s \n", a[index].second_name);
printf("Оценка: %1.2f \n", a[index].grade);
printf("Номер зачетки: %d \n", a[index].num);
}
}
/*void chang(int pos)
{
printf("Введите имя:\n");
while (strcmp(s_gets(a[pos].fam, MAXAUTL), STOP) != 0 && pos < MAXBKS)
{
printf("Введите отчество:\n");
s_gets(a[pos].second_name, MAXAUTL);
printf("Введите номер зачетки:\n");
scanf("%d", &a[pos].num);
printf("Введите оценку:\n");
scanf("%f", &a[pos].grade);
}
}*/
char* s_gets(char* st, int n)
{
char* ret_val;
char* find;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
find = strchr(st, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2019, 19:46
Ответы с готовыми решениями:

Создание задания, добавление процессов, удаление процессов
Здравствуйте. Уже который день бьюсь со своей лабораторной работой - не получается, и все. Идея...

Файлы. Создание и размещение небольшого текста, создание двух дочерних процессов, вывод результи- рующего файла на экран
Помогите пожалуйста с программой. Разработайте программу, выполняющую: 1) создание файла и...

Создание двух дочерних процессов
Я всю программу сделал, но создал только 1 дочерний. Как сделать их 2 и более? Уже 3-й час не могу...

Найти среди выполняющихся процессов имена процессов, выполняющихся в двух или более экземпляров
Есть два задания: 1. Найти среди выполняющихся процессов имена процессов, выполняющихся в двух или...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2019, 19:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Взаимодействие двух процессов
Помогите пожалуйста сделать две нити. первая нить &quot;Писатель&quot; вторая нить &quot;Читатель&quot; Писатель...

Создание 3 процессов
Данная программа должна создавать 3 процесса: 1 процесс: p1=n+2 2 процесс: p2=k+5 3 процесс:...

Создание процессов
Задача: Дано n файлов, в каждом из которых n вещественных чисел. Имена файлов заданы массивом....

Создание процессов
Всем здравствуйте. Вопрос такой, есть ли возможность в Turbo Pascal 7.0 создавать процессы и потоки?

Создание процессов
Ребята, прошу помощи в решении данных задач: 1)Разработать программу, выполняющую &quot;разветвление&quot;...

Работа двух процессов с одним файлом
Здравствуйте, есть два процесса, один заполняет файл , другой выводит его каждые 5с. Нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.