Ls -l /home/student | sort

1.3. Замените в исходном тексте программы оператор (дайте этой программе имя pipework1.c)

execlp ("ls", "ls", "-l", "/home/student", 0);

несколькими системными вызовами write(), которые запишут в канал последовательность слов (например, “thisn”,“isn”,“a”,“messagen”,‘fromn”,“sendingn”,“process”). Для записи этих слов в канал следует использовать системный вызов write() так же, как и для обычного файла, указывая дескриптор fd[1]. После записи всех слов в канал закройте fd[1] и завершите процесс (exit()). Выполните программу.

Примечание. Для этой модификации оператор dup2(fd[1],1); НЕ НУЖЕН, его следует убрать.

1.4. Замените в программе из задания 1.3 оператор (дайте этой программе имя pipework2.c)

execlp ("sort", "sort", 0);

фрагментом, в котором читаются слова из канала и выводятся на стандартное устройство вывода (т.е. на экран). Для чтения данных из канала следует использовать системный вызов read() как и для обычного файла, указывая дескриптор fd[0]. После чтения и печати всех слов закройте fd[0] и завершите процесс (exit()).

Замечание. Для этой модификации оператор dup2(fd[0],0); НЕ НУЖЕН, его следует убрать.

1.4. В общем случае читать из канала могут несколько процессов; писать в канал также могут несколько процессов. Напишите программу pipework3.c, которая создает три дочерних процесса. Два из них записывают в канал по одному сообщению каждый, а третий дочерний процесс читает эти сообщения из канала и распечатывает их.

1.5. Для установления двухсторонней связи между процессами следует создать два канала, работающих в противоположных направлениях. Напишите программу pipework4.c для двухстороннего общения между двумя процессами с использованием двух каналов.

1.6. Запишите результаты работы всех программ и объясните их работу.

 

II. Именованные каналы (named pipes, FIFOs)

Именованный канал - это однонаправленный канал связи между двумя или более процессами в UNIX. В действительности именованный канал является файлом, который создается одним процессом и который затем может использоваться этим и/или другими процессами для связи. Существование в каталоге именованного канала легко можно обнаружить при просмотре оглавления каталога: строка, соответствующая именованному файлу, начинается с символа 'p' (вместо 'd' для каталога или '-' для обычного файла).

В оболочке именованный канал создается командой mknod или mkfifo.

Задание2. Выполните команду