Для студентов МГТУ им. Н.Э.Баумана по предмету Разработка программных системЛабораторная работа №1 (вариант 12)Лабораторная работа №1 (вариант 12)
5,0052
2021-04-012021-04-01СтудИзба
Лабораторная работа 1: Лабораторная работа №1 (вариант 12) вариант 12
Описание
Задание
Разработать программу, реализующую обработку текстовых файлов и функционирующую в рамках 3-х процессов. Корневой процесс является управляющим и принимает в качестве аргументов имена 2-х файлов. В начале своей работы он порождает 2 процесса, передавая каждому по одному имени файла. Первый порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в верхнем регистре на стандартный вывод. Второй порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в нижнем регистре на стандартный вывод. Управляющий процесс считывает со стандартного ввода строки, содержащие имена новых текстовых файлов и заставляет порожденные процессы немедленно переходить на обработку новых файлов по следующей схеме: второй порожденный процесс переходит к обработке файла, ранее обрабатываемого первым процессом; первый порожденный процесс начинает обрабатывать файл, имя которого ему передает управляющий процесс
Описание структуры программы
Программа принимает в качестве аргументов два файла. Под каждый файл создается строка, хранящая его название fileName1 и fileName2. С помощью системного вызова fork() порождаются два процесса. С помощью системного вызова execl() образ первого процесса заменяется на образ программы child1(написана заранее), которая осуществляет побайтное считывание файла fileName1 с помощью системного вызова read() и побайтный вывод с задержкой на каждой строке символа из fileName1 в верхнем регистре с помощью системного вызова write(). Аналогично, образ второго процесса заменяется на child2, осуществляющую вывод в нижнем регистре. Реализованный механизм обработки новых файлов работает следующим образом. Изначально строки, хранящие имена файлов, обрабатываемых первым и вторым процессамипотомками (fileName1 и fileName2) хранят второй и третий аргумент основной программы. Затем порождаются 2 процесса потомка с помощью fork() и запускается цикл, в котором вначале происходит два вызова execl() - замена образа первого и второго процесса на образ программ, переводящих содержимое файла в верхний и нижний регистры, при этом в качестве аргумента, отвечающего за имя обрабатываемого файла, первому execl'у передается fileName1, второму - fileName2. Далее управляющий процесс предлагает пользователю ввести новое имя файла, которое впоследствии будет передаваться первому процессу-потомку, поэтому оно присваивается в fileName1, при этом предыдущее значение fileName1 предварительно запоминается в fileName2 (т.к. по заданию необходимо, чтобы второй процесс-потомок переходил к обработке файла, ранее обрабатываемого первым процессом). После того, как пользователь закончит ввод и нажмет enter, оба порожденных процесса останавливаются с помощью сигнала остановки. На этом текущая итерация заканчивается. Сигналы остановки нужны для обеспечения немедленного перехода процессов-потомков к обработке новых файлов (что требуется по заданию). В начале следующей итерации процессы-потомки возобновляются, снова вызываются execl'ы, снова первому execl'у передается fileName1, второму - fileName2, после чего управляющий процесс снова запрашивает ввод нового имени файла, и так далее.
![]()
Разработать программу, реализующую обработку текстовых файлов и функционирующую в рамках 3-х процессов. Корневой процесс является управляющим и принимает в качестве аргументов имена 2-х файлов. В начале своей работы он порождает 2 процесса, передавая каждому по одному имени файла. Первый порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в верхнем регистре на стандартный вывод. Второй порожденный процесс осуществляет побайтное считывание файла и вывод с небольшой задержкой прочитанных байт (по одному на строке) в нижнем регистре на стандартный вывод. Управляющий процесс считывает со стандартного ввода строки, содержащие имена новых текстовых файлов и заставляет порожденные процессы немедленно переходить на обработку новых файлов по следующей схеме: второй порожденный процесс переходит к обработке файла, ранее обрабатываемого первым процессом; первый порожденный процесс начинает обрабатывать файл, имя которого ему передает управляющий процесс
Описание структуры программы
Программа принимает в качестве аргументов два файла. Под каждый файл создается строка, хранящая его название fileName1 и fileName2. С помощью системного вызова fork() порождаются два процесса. С помощью системного вызова execl() образ первого процесса заменяется на образ программы child1(написана заранее), которая осуществляет побайтное считывание файла fileName1 с помощью системного вызова read() и побайтный вывод с задержкой на каждой строке символа из fileName1 в верхнем регистре с помощью системного вызова write(). Аналогично, образ второго процесса заменяется на child2, осуществляющую вывод в нижнем регистре. Реализованный механизм обработки новых файлов работает следующим образом. Изначально строки, хранящие имена файлов, обрабатываемых первым и вторым процессамипотомками (fileName1 и fileName2) хранят второй и третий аргумент основной программы. Затем порождаются 2 процесса потомка с помощью fork() и запускается цикл, в котором вначале происходит два вызова execl() - замена образа первого и второго процесса на образ программ, переводящих содержимое файла в верхний и нижний регистры, при этом в качестве аргумента, отвечающего за имя обрабатываемого файла, первому execl'у передается fileName1, второму - fileName2. Далее управляющий процесс предлагает пользователю ввести новое имя файла, которое впоследствии будет передаваться первому процессу-потомку, поэтому оно присваивается в fileName1, при этом предыдущее значение fileName1 предварительно запоминается в fileName2 (т.к. по заданию необходимо, чтобы второй процесс-потомок переходил к обработке файла, ранее обрабатываемого первым процессом). После того, как пользователь закончит ввод и нажмет enter, оба порожденных процесса останавливаются с помощью сигнала остановки. На этом текущая итерация заканчивается. Сигналы остановки нужны для обеспечения немедленного перехода процессов-потомков к обработке новых файлов (что требуется по заданию). В начале следующей итерации процессы-потомки возобновляются, снова вызываются execl'ы, снова первому execl'у передается fileName1, второму - fileName2, после чего управляющий процесс снова запрашивает ввод нового имени файла, и так далее.

Характеристики лабораторной работы
Учебное заведение
Семестр
Номер задания
Вариант
Просмотров
156
Размер
1,03 Mb
Список файлов
Лабораторная работа №1 (вариант 12).pdf

Ваше удовлетворение является нашим приоритетом, если вы удовлетворены нами, пожалуйста, оставьте нам 5 ЗВЕЗД и позитивных комментариев. Спасибо большое!