Page 71 - 2578
P. 71
байтів. Виклик write(2) виконується неподільними порціями, і
запис виконується ядром за одну неперервну операцію.
Батьківський процес виконується у нескінченному циклі, а
дочірній надсилає повідомлення батьківському, опитуючи
канал і перевіряючи, чи надійшли дані.
Буферізація даних у каналі стандартно зреалізовується
шляхом відокремлювання дискового простору у структурі
файлової системи. Отже, запис та читання пов’язані з
дисковим введенням/виведенням, що зменшує його
продуктивність. Сучасні серверні ОС забезпечують роботу
каналів через спеціальну файлову систему HPPS (High
Performance Pipe System). З її допомогою дані буферизуються
в оперативній пам’яті, що прискорює запис/читання.
Функції та системні виклики ОС UNIX, потрібні для
створювання іменованих каналів
1 Функція pipe(2) створює односпрямований канал
(симплексний) для анонімного обміну даними поміж двома
спорідненими процесами, позаяк лише вони можуть отримати
доступ до одного й того самого каналу. Після завершення
роботи канал знищується. Функція має вигляд
#include <unistd.h>
int pipe(int filedes[2])
Функція повертає два файлових дескриптори fd у масиві
fd[0] та fd[1]; filedes[0] дозволяє читання даних з каналу, а
filedes[1] використовується для записування даних у канал.
2 Функція fcntl(2) забезпечує керування файловими
операціями у вже відкритих файлах, заданих дескрипторами
файла — filedes.
#include < fcntl.h> — заголовний файл, у якому визначено
цілі константи: O_RDONLY (для решти лише читати),
O_WRONLY (для решти лише писати), O_RDWR (для решти
70