Використання іменних потоків в GNU / Linux.

В програмуванні іменований канал або іменований конвеєр ( англ. named pipe ) - Розширення поняття конвеєра в Unix і подібних ОС, один з методів між процесами взаємодії. Це поняття також існує і в Microsoft Windows, хоча там його семантика істотно відрізняється. Традиційний канал - "безіменні", тому що існує анонімно і тільки під час виконання процесу. Іменований канал - існує в системі і після завершення процесу. Він повинен бути "від'єднаний" або видалений коли вже не використовується. Процеси звичайно приєднуються до каналу для здійснення взаємодії між процесами.


1. Іменовані канали в Unix

Замість традиційного, безіменного конвеєра оболонки ( англ. shell pipeline ), Іменований канал створюється явно за допомогою mknod або mkfifo, і два різних процесу можуть звернутися до нього по імені.

Наприклад, можна створити канал і налаштувати gzip на стиск того, що туди потрапляє:

 mkfifo pipe gzip -9-c  out 

Паралельно, в іншому процесі можна виконати:

 cat file> pipe 

що призведе до стиснення переданих даних gzip-ом.


2. Іменовані канали в Windows

У Windows дизайн іменованих каналів зміщений до взаємодії "Клієнт-сервер", і вони працюють багато в чому як сокети : крім звичайних операцій читання і запису, іменовані канали в Windows підтримують явний "пасивний" режим для серверних додатків (для порівняння: Unix domain socket). Windows 95 підтримує клієнти іменованих каналів, а системи гілки Windows NT можуть служити також і серверами.

До іменовані канали можна звертатися в значній мірі як до файлу. Можна використовувати функції Windows API CreateFile, CloseHandle, ReadFile, WriteFile, щоб відкривати і закривати канал, виконувати читання і запис. Функції стандартної бібліотеки Сі такі як fopen, fread, fwrite і fclose, теж можна використовувати, на відміну від сокетів Windows (англ.), які не реалізують використання стандартних файлових операцій в мережі. Інтерфейс командного рядка (як в Unix) відсутня.

Іменовані канали - не існують постійно і не можуть, на відміну від Unix, бути створені як спеціальні файли у довільній доступною для запису файловій системі, але мають тимчасові імена (звільняються після закриття останньої посилання на них), які виділяються в корені файлової системи іменованих каналів ( англ. named pipe filesystem, NPFS ) І монтуються за спеціальним шляху "\ \. \ Pipe \" (тобто в каналу під назвою " foo "повне ім'я буде" \ \. \ pipe \ foo "). Анонімні канали, що використовуються в конвеєрах - це насправді іменовані канали з випадковим ім'ям.

Іменовані канали зазвичай не доступні безпосередньо користувачеві, але є істотні виключення. Наприклад, засіб віртуалізації робочих станцій VMWare може відкривати емульований послідовний порт для головної системи як іменований канал, а відладчик рівня ядра kd від Microsoft підтримує іменовані канали в якості засобу повідомлення при налагодженні (фактично, так як kd зазвичай вимагає підключення до цільового комп'ютера по послідовному порту, VMware і kd можна з'єднати разом для налагодження драйверів пристроїв на одному комп'ютері). Обидві програми вимагають від користувача вказівки імен каналу у вигляді "\ \. \ Pipe \ ім'я".

Іменовані канали в Windows NT можуть успадковувати контекст безпеки.


3. Іменовані канали в мережах Windows

Іменовані канали - це також мережевий протокол в SMB, заснований на використанні особливої ​​частини між процесами взаємодії (IPC). IPC в SMB може безшовно і прозоро передавати контекст аутентифікації користувача на іншу сторону іменованого каналу. Спадкування аутентифікації для іменованих каналів Windows NT для користувача і розробника настільки прозоро, що майже непомітно, у зв'язку з чим його часто неправильно розуміють.


4. Зовнішні посилання

Перегляд цього шаблону Межпроцессное взаємодія в інформатиці
Методи Файл Memory-mapped file Обмін повідомленнями Message queue and mailbox Іменований канал Anonymous pipe Pipe Семафор ( критична секція, мьютекс, фьютекс) Shared memory Сигнал Сокет Unix domain socket
Вибрані протоколи
і стандарти
Apple events COM + CORBA D-Bus DCE DCOP DIPC ICE LINX ONC RPC POSIX (різні методи) SOAP Thrift TIPC XML-RPC