Задание 9 (индивидуальное): неименованные каналы

Указания:

  • Задание реализуется в двух вариантах: при помощи интерфейсов Windows API и POSIX.
  • Для взаимодействия процессов необходимо использовать неименованные каналы.
  • Считывать входные данные можно из стандартного ввода, текстового файла или аргументов командной строки.

  1. Родительский процесс должен считать пять строк и передать их дочернему процессу. Дочерний процесс должен выполнить замену всех вхождений второй строки в первой на третью. Результат замены вместе с четвёртой и пятой строкой дочерний процесс должен передать своему дочернему процессу, который, аналогично, должен выполнить замену и вывести свой результат на печать.

  2. Родительский процесс должен считать содержимое текстового файла и передать его дочернему процессу. Дочерний процесс в полученном тексте должен найти все строки, начинающиеся с символов комментария (//), возможно, после нескольких пробелов, и вернуть их обратно родительскому процессу, добавляя в начало каждой строки её номер и в конец — длину. Родительский процесс должен вывести получаемые строки на печать.

  3. Родительский процесс должен считать содержимое двух текстовых файлов и передать его дочернему процессу попарно по одной строке из каждого файла (если в одном из файлов строк больше, чем во втором, оставшиеся строки с номерами, большими количества строк в другом файле, не передаются). Дочерний процесс должен выполнить сравнение получаемых пар строк и вернуть обратно родительскому процессу пары различающихся строк вместе с их номерами и позициями первых отличающихся символов. Родительский процесс должен вывести полученные строки с номерами в начале на печать, отмечая внизу позиции начала различия.

  4. Родительский процесс должен считать содержимое текстового файла и передать его дочернему процессу. Дочерний процесс в полученном тексте должен дополнить все строки длиной менее 80 символов в конце символами «.». В конце каждой строки необходимо добавить её исходную длину. Результат дочерний процесс должен вернуть обратно родительскому процессу, который должен его вывести на печать.

  5. Родительский процесс должен создать в двумерном массиве таблицу умножения пар чисел от 1 до n. Полученный массив он должен передать дочернему процессу, который по нему должен сформировать его текстовое представление в виде таблицы и передать обратно родительскому. Далее родительский процесс должен вывести полученное содержимое на печать.

  6. Родительский процесс должен считать командную строку и передать дочернему процессу. Дочерний процесс должен выполнить полученную команду в дочернем для себя процессе, перехватывая его вывод. Далее дочерний процесс должен добавить в начало каждой строки полученного вывода её порядковый номер и передать в таком виде родительскому процессу. Родительский процесс должен вывести полученные строки на печать.

  7. Родительскому процессу присваивается порядковый номер 1. Он должен запустить свою копию в качестве дочернего процесса, которому присваивается номер 2. Дочерний процесс должен проверить свой порядковый номер: если он равен заданному числу n, то он больше не создаёт дочерних процессов, иначе создаёт свою копию, которой присваивается следующий номер за порядковым номером родителя. Далее первый родительский процесс генерирует случайное целое число и выводит на печать. Затем он передаёт его своему дочернему, который увеличивает его на 1, выводит на печать и передаёт своему дочернему процессу, если он у него есть.

  8. Родительский процесс создаёт два дочерних процесса. Далее он генерирует последовательность из n случайных целых чисел, выводит их на печать и передаёт обоим дочерним процессам. Первый дочерний процесс возвращает родительскому те из чисел, которые в своём десятичном представлении содержат цифру 3, а второй — цифру 5. Родительский процесс должен вывести полученные числа вместе с номерами дочерних процессов, от которых он эти числа получил.

  9. Родительский процесс должен сгенерировать последовательность из n случайных целых чисел, которые затем должен передать дочернему. Дочерний процесс должен запомнить первое переданное ему число. Среди всех остальных получаемых от родителя чисел те из них, которые меньше первого числа, он должен передать своей первой копии в качестве дочернего процесса, а которые больше — второй. По окончании приёма чисел каждый дочерний процесс должен вывести запомненное первое полученное им число.

  10. Родительский процесс должен создать свою копию в качестве дочернего процесса, который в свою очередь должен создать свою дочернюю копию. Далее родительский процесс должен сгенерировать последовательность из n случайных целых чисел, которые затем должен распечатать и передать дочернему. Дочерний процесс все чётные числа должен передать обратно родительскому процессу, а нечётные — своему дочернему. По окончании передачи первый и третий процессы должны вывести полученные ими числа на печать вместе с указанием номера процесса.

  11. Родительский процесс должен создать k - 1 дочерних процессов, присвоив каждому номера от 2 до k. Далее родительский процесс должен сгенерировать последовательность из n случайных целых чисел и вывести на печать. Далее для каждого числа, если оно не делится на i      ∀ i ∈ { 1, 2, ..., k }, родительский процесс посылает его дочернему с номером i. По окончании передачи каждый дочерний процесс должен вывести полученные им числа вместе со своим номером.

  12. Родительский процесс должен считать последовательность слов и передать их дочернему. Дочерний процесс должен запомнить эти слова в словаре. Далее родительский процесс должен передать дочернему другую последовательность слов. Дочерний процесс должен вернуть родительскому каждое из этих слов вместе с отметкой того, содержится ли оно в его словаре. После этого родительский процесс должен вывести полученные данные на печать.