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
   66   67   68   69   70   71   72   73   74   75   76