Page 66 - 2578
P. 66
int pipe(int *filedes),
який повертає два файлових дескриптори: filedes[0] — для
запису до каналу та filedes[1] — для читання з каналу. Якщо
один процес записує дані до filedes[0], інший може отримати
ці дані з filedes[1]. При створюванні процесу атрибути
батьківського процесу наслідуються дочірнім процесом, у
тому числі файлові дескриптори. Доступ до дескрипторів
filedes каналу може отримати сам процес, що він викликав
pipe(2), та його дочірні процеси. Отже, канали може бути
використано для передавання даних лише поміж родинними
процесами, а для міжпроцесної взаємодії поміж незалежними
процесами не використовуються.
У наведеному прикладі обидва процеси, cat(1) та wc(1),
створюються процесом shell і тому є родинними, хоча на
перший погляд здаються незалежними.
Повідомлення та їхні черги є складовою частиною UNIX
System V, вони обслуговуються ОС, розміщуються в
адресному просторі ядра і є розподілюваним системним
ресурсом. Кожна черга має свій унікальний ідентифікатор, а
процеси можуть записувати та зчитувати повідомлення з
різних черг. Процес, що він надсилає повідомлення до черги,
може не очікувати на читання цього повідомлення певним
іншим процесом. Він може завершити своє виконання,
залишивши у черзі повідомлення, яке буде прочитане іншим
процесом пізніше. Це надає можливість процесам
обмінюватись структурованими даними, які мають атрибути:
тип повідомлення; повідомлення в одній черзі можуть
бути мультиплексовані;
довжина даних повідомлення у байтах (може бути
нульовою);
власне дані; за ненульової довжини вони можуть бути
структурованими.
65