Лабораторная работа 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⭐ и напишите отзыв. Это поможет другим студентам, а мне даст силы делать ещё больше качественных материалов для вас 🔥
Комментарии
Нет комментариев
Стань первым, кто что-нибудь напишет!
Отзывы на другие работы автора
ДМ1519 - Проектирование привода цепного транспортера с двухступенчатым цилиндрическим редуктором выполненным по развернутой схеме
Есть недочёты, хорошо подходит как база для выполнения аналогичного варианта курсача
Сборочная размерная цепь + Подетальная размерная цепь
Были замечания, но автор все быстро исправил, теперь все отлично.
Плоская и пространственная статика
Есть небольшая путаница с углами из условий, которая может влиять на численный ответ, и подобные мелкие ошибки, в остальном всё хорошо
Кратные и криволинейные интегралы
есть ошибка в 5 номере и преподаватели уже начинают палить что эта работа списана
Отчет по производственной практике - Композиционные материалы - Предприятие НИИ СМ МГТУ им. Н.Э. Баумана
Спасибо! Изложение краткое и конструктивное, лишней информации нет. Помогло при составлении отчета
МГТУ им. Н.Э.Баумана
anhyeuem




















