русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Іменовані канали в Linux

Іменовані канали в Linux (в UNIX їх іноді називають FIFO) можуть використовуватися як засіб взаємодії між неродственными і навіть віддаленими процесами. Такий канал має зовнішнє ім'я, яке включається до простір імен файлової системи. Тому іменований канал ще більше схожий на файл, ніж неіменовані. В системі канал є спеціальним файлом і створюється спеціальним системним викликом:

 int mknod(char *name, int mode, int dev);

Цей системний виклик може використовуватися також для створення звичайних файлів каталогів та інших спеціальних файлів. Параметр цього виклику є покажчиком на символьне рядок, що містить ім'я каналу (ім'я може включати в себе також і шлях). Параметр mode визначає тип створюваного файлу і режим доступу до нього. Старші 7 біт цього числа визначають тип створюваного файлу (для іменований канал він може кодувати макроконстантой: S_IFIFO, молодші 9 біт визначають права доступу "rwx" для власника (старша трійка)для групи (середня трійка), для всіх інших (молодша трійка). Так, наприклад, для каналу, який буде доступний тільки для власника, код параметра mode S_IFIFO|0x140, а для каналу, доступного для всіх-всіх-всіх - S_IFIFO|0x1B6. (Природно, право "x " для каналу не визначається.) Третій параметр при створенні каналу задається 0.

Далі при роботі з іменнованим каналом використовуються файлові системні виклики:

 int open(int *name, int oflag);
 int read(int pipe_fd, void *area, int cnt);
 int write(int pipe_fd, void *area, int cnt);
 int close(int pipe_fd);

Зверніть увагу на те, що при відкритті файлу-каналу можуть бути задані прапори відкриття, серед яких може бути і прапор O_NDELAY. Якщо іменований канал відкритий з цим прапором, то процес, який працює з іменнованим каналом, не переходить у очікування в тих випадках, які призводять до припинення процесу, який працює з неименованным каналом, - замість цього системні виклики read і write закінчуються з ознакою помилки.

Іменований канал є постійним об'єктом, він зберігається навіть після завершення що створив його процесу і при необхідності повинен бути знищений явно - за допомогою системного виклику:

 int unlink(char *name);

Приклад виконання наведено тут.


Довідковий матеріал

Обрані системні виклики Linux/Unix. Короткий опис.

Довідник бібліотечних функція мови З: частина 1, частина 2 (кодування кирилиця ibm866).


Переглядів: 10292

Повернутися в зміст:ОС Linux




Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн