Operation Systems lab №1 Тема: «Создание процессов».
Задача. Написать консольную программу Main и две утилиты (служебные программы) Creator и Reporter, которые выполняют следующие действия. Утилита Creator создает бинарный файл, имя которого и количество записей в котором получает через командную строку. Записи файла вводятся с консоли и имеют следующую структуру: struct employee { int num; // идентификационный номер сотрудника char name[10]; // имя сотрудника double hours; // количество отработанных часов }; Утилита Reporter создает текстовый файл, содержащий упорядоченный список сотрудников с начисленной заработной платой. Отчет формируется на основе бинарного файла, созданного программой Creator.
- Утилита получает через командную строку следующие данные: 1.1. Имя исходного бинарного файла. 1.2. Имя файла отчета. 1.3. Оплата за час работы.
- Отчет содержит следующие строки: 2.1. Заголовок: Отчет по файлу «имя исходного бинарного файла». 2.2. Строка: Номер сотрудника, имя сотрудника, часы, зарплата. 2.3. Список сотрудников по строкам. Каждая строка содержит информацию из соответствующей записи бинарного файла, а последний столбец строки - начисленную зарплату = кол-ву отработанных часов * оплату за час работы.
Программа Main выполняет следующие действия:
- Запрашивает с консоли имя бинарного файла и количество записей в этом файле.
- Запускает утилиту Creator, которой передает через командную строку имя создаваемого бинарного файла и количество записей в этом файле.
- Ждет завершения работы утилиты Creator.
- Выводит содержимое созданного бинарного файла на консоль.
- Запрашивает с консоли: a. Имя файла отчета. b. Оплату за час работы.
- Запускает утилиту Reporter, которой передает через командную строку: a. Имя исходного бинарного файла. b. Имя файла отчета. c. Оплату за час работы.
- Ждет завершения работы утилиты Reporter.
- Выводит отчет на консоль.
- Завершает свою работу. Примечание. Для ожидания завершения работы процессов Creator и Reporter использовать функцию: DWORD WaitForSingleObject( HANDLE hHandle, // дескриптор объекта DWORD dwMilliseconds // интервал ожидания в миллисекундах ); где второй параметр установить равным INFINITE, например WaitForSingleObject(hCreator, INFINITE); здесь hCreator – дескриптор процесса Creator.