Задание
Разработать программу, осуществляющую нахождение суммы всех цифр в заданной ASCII-строке.
Решение на 4 балла:
Разработка программы, осуществляющей взаимодействие между тремя дочерними процессами с использованием неименованных каналов.
Код программы с соответствующими комментариями sum_4.c находится в папке "4".
Соблюдение требований:
-
Общая схема решаемой задачи.
┌───────────┐ ┌───────────┐ ┌───────────┐ │ input.txt ├────>│ Child 1 ├────>│ channel 1 ├────>┐ └───────────┘ ├───────────┤ ├───────────┤ │ │ Read data ├────>│ Write data│ │ └───────────┘ └───────────┘ │ ├────>┌─────────────┐ │ │ Child 3 │ ┌───────────┐ ┌───────────┐ │ ├─────────────┤ │ │<────┤ channel 2 │<────┘ │ Write sum to│ │ Child 2 │ ├───────────┤ │ output │ │ Sum digits│ │ Write sum │ └─────────────┘ └───────────┘ └───────────┘
В данной схеме показаны три дочерних процесса, которые запускаются в родительском процессе.
Первый дочерний процесс открывает входной файл input.txt и читает из него данные в буфер. Затем он записывает данные в канал 1 и завершает свое выполнение.
Второй дочерний процесс читает данные из канала 1 и вычисляет сумму цифр в этих данных. Затем он записывает сумму в канал 2 и завершает свое выполнение.
Третий дочерний процесс читает сумму из канала 2 и записывает ее в выходной файл output.txt. Затем он завершает свое выполнение.
-
Для задания имен входного и выходного файлов используются аргументы командной строки.
./sum_4 input1.txt output1.txt
-
Ввод и вывод данных при работе с файлами осуществляется через системные вызовы read и write.
-
Размеры буферов для хранения вводимых данных и результатов обработки раны 5000 байт.
-
Представлен набор (не менее пяти) текстовых файлов, на которых проводилось тестирование программы. Тесты были составлены с учетом того, чтобы проверить не только фактическую точность подсчёта, но и выявить возможные ошибки.
Файлы с тестами (в соответствующей папке "4"):
-
Для каждого из тестовых файлов представлен файл, полученный в результате работы программы:
Файлы с результатами работы программы (в соответствующей папке "4"):
Решение на 5 баллов:
Разработка программы, в которой взаимодействие между тремя дочерними процессами осуществляется через именован- ные каналы.
Код программы с соответствующими комментариями sum_5.c находится в папке "5".
Соблюдение требований:
-
Общая схема решаемой задачи.
┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ Parent ├────►│ Child 1 ├────►│ Pipe 1 │ │ │ │ (Write) │ │ │ └───┬───────────┘ └───────────────┘ └─────┬─────────┘ │ ┌───────────────┐ ┌───────────────┐ │ └────┤ │ │ │ │ │ Child 2 ├────►│ Pipe 2 ├──┘ │ (Read/Write) │ │ │ └───────────────┘ └───┬───────────┘ │ ┌─────────┴───────────┐ │ Child 3 │ │ (Read) │ └────────┬────────────┘ │ ▼ ┌─────────────────────┐ │ Output File │ └─────────────────────┘
В данной схеме показаны три дочерних процесса, которые запускаются в родительском процессе. Таким образом, главный процесс и три дочерних процесса связаны через два именованных канала: p1_pipe и p2_pipe. Первый дочерний процесс записывает данные в p1_pipe, второй процесс считывает данные из p1_pipe и записывает результат в p2_pipe, а третий процесс считывает данные из p2_pipe и записывает их в выходной файл.
-
Для задания имен входного и выходного файлов используются аргументы командной строки.
./sum_5 input1.txt output1.txt
-
Ввод и вывод данных при работе с файлами осуществляется через системные вызовы read и write.
-
Размеры буферов для хранения вводимых данных и результатов обработки раны 5000 байт.
-
Представлен набор (не менее пяти) текстовых файлов, на которых проводилось тестирование программы. Тесты были составлены с учетом того, чтобы проверить не только фактическую точность подсчёта, но и выявить возможные ошибки.
Файлы с тестами (в соответствующей папке "5"):
-
Для каждого из тестовых файлов представлен файл, полученный в результате работы программы:
Файлы с результатами работы программы (в соответствующей папке "5"):
Решение на 6 баллов:
Разработка программы, которая осуществляет взаимодействие между двумя дочерними процессами с использованием неименованных каналов.
Код программы с соответствующими комментариями sum_6.c находится в папке "6".
Соблюдение требований:
-
Общая схема решаемой задачи.
┌───────────┐ ┌───────────┐ ┌───────────┐ │ input.txt ├────>│ Child 1 ├────>│ channel 1 ├────>┐ └───────────┘ ├───────────┤ ├───────────┤ │ │ Read data ├────>│ Write data│ │ └───────────┘ └───────────┘ │ ├────>┌─────────────┐ │ │ Child 1 │ ┌───────────┐ ┌───────────┐ │ ├─────────────┤ │ │<────┤ channel 2 │<────┘ │ Write sum to│ │ Child 2 │ ├───────────┤ │ output │ │ Sum digits│ │ Write sum │ └─────────────┘ └───────────┘ └───────────┘
В данной схеме показаны два дочерних процесса, которые запускаются в родительском процессе. Таким образом, главный процесс и два дочерних процесса связаны через два именованных канала: p1_pipe и p2_pipe. Первый дочерний процесс записывает данные в p1_pipe, второй процесс считывает данные из p1_pipe и записывает результат в p2_pipe, а затем первый процесс считывает данные из p2_pipe и записывает их в выходной файл.
-
Для задания имен входного и выходного файлов используются аргументы командной строки.
./sum_6 input1.txt output1.txt
-
Ввод и вывод данных при работе с файлами осуществляется через системные вызовы read и write.
-
Размеры буферов для хранения вводимых данных и результатов обработки раны 5000 байт.
-
Представлен набор (не менее пяти) текстовых файлов, на которых проводилось тестирование программы. Тесты были составлены с учетом того, чтобы проверить не только фактическую точность подсчёта, но и выявить возможные ошибки.
Файлы с тестами (в соответствующей папке "6"):
-
Для каждого из тестовых файлов представлен файл, полученный в результате работы программы:
Файлы с результатами работы программы (в соответствующей папке "6"):
Решение на 7 баллов:
Разработка программы,которая осуществляет взаимодействие между двумя дочерними процессами с использованием именованных каналов.
Код программы с соответствующими комментариями sum_7.c находится в папке "7".
Соблюдение требований:
-
Общая схема решаемой задачи.
┌───────────┐ ┌───────────┐ ┌───────────┐ │ input.txt ├────>│ Child 1 ├────>│ channel 1 ├────>┐ └───────────┘ ├───────────┤ ├───────────┤ │ │ Read data ├────>│ Write data│ │ └───────────┘ └───────────┘ │ ├────>┌─────────────┐ │ │ Child 1 │ ┌───────────┐ ┌───────────┐ │ ├─────────────┤ │ │<────┤ channel 2 │<────┘ │ Write sum to│ │ Child 2 │ ├───────────┤ │ output │ │ Sum digits│ │ Write sum │ └─────────────┘ └───────────┘ └───────────┘
В данной схеме показаны два дочерних процесса, которые запускаются в родительском процессе. Таким образом, главный процесс и два дочерних процесса связаны через два именованных канала: p1_pipe и p2_pipe. Первый дочерний процесс записывает данные в p1_pipe, второй процесс считывает данные из p1_pipe и записывает результат в p2_pipe, а затем первый процесс считывает данные из p2_pipe и записывает их в выходной файл.
-
Для задания имен входного и выходного файлов используются аргументы командной строки.
./sum_7 input1.txt output1.txt
-
Ввод и вывод данных при работе с файлами осуществляется через системные вызовы read и write.
-
Размеры буферов для хранения вводимых данных и результатов обработки раны 5000 байт.
-
Представлен набор (не менее пяти) текстовых файлов, на которых проводилось тестирование программы. Тесты были составлены с учетом того, чтобы проверить не только фактическую точность подсчёта, но и выявить возможные ошибки.
Файлы с тестами (в соответствующей папке "7"):
-
Для каждого из тестовых файлов представлен файл, полученный в результате работы программы:
Файлы с результатами работы программы (в соответствующей папке "7"):