99
if not CreatePipe(hRead,hWrite,NIL,BufSize) then
writeln(‘Create pipe failed.’);
WriteFile(hWrite,BufOut,BytesOut,BytesOut,NIL);
write(‘Write into pipe ‘,BytesOut,’ bytes : ‘);
for i:=0 to BytesOut do write(BufOut[i]);
writeln;
ReadFile(hRead,BufIn,BytesIn,BytesIn,NIL);
write(‘Read from pipe ‘,BytesIn,’ bytes : ‘);
for i:=0 to BytesIn do write(BufIn[i]);
end.
Як самостійну вправу рекомендується організувати через ано-
німний канал взаємодію між окремими процесами (модель клі-
єнт-сервер). Процес-сервер повинен створити канал, записати в
нього інформацію і запустити процес-клієнт, завдання якого –
витягнути записану інформацію з каналу.
Іменовані канали
Іменовані канали є об’єктами ядра ОС Windows, що дозволя-
ють організувати міжпроцесний обмін не тільки в ізольованій об-
числювальній системі, але і в локальній мережі. Вони забезпечу-
ють дуплексний зв’язок і дозволяють використовувати як потоко-
ву модель, так і модель, зорієнтовану на повідомлення. Обмін да-
ними може бути синхронним і асинхронним.
Канали повинні мати унікальні в рамках мережі імена відпові-
дно до правил іменування ресурсів у мережах Windows (Universal
Naming Convention, UNC), наприклад \ServerName\pipe\PipeName.
Для спілкування усередині одного комп’ютера ім’я записується у
формі \.\pipe\PipeName, де "." позначає локальну машину. Слово
"pipe" у складі імені фіксоване, а PipeName – ім’я, що задається
користувачем. Ці імена, подібно до імен відкритих файлів, не є
іменами об’єктів. Вони належать до простору імен під управлін-
ням драйверів файлових систем іменованих каналів
(\Winnt\System32\Drivers\Npfs.sys), прив’язаного до спеціального
об’єкта пристрою \Device\NamedPipe, на яке є посилання в ката-
лозі глобальних імен об’єктів \??\Pipe (ці останні імена "бачить"
утиліта WinObj).