Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор ДТонсон Π₯Π°Ρ€Ρ‚

ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики

Как ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹, ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики (mailslots) Windows ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для обСспСчСния взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ нСзависимыми ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, основанный Π½Π° Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ°Ρ… (описаны Π² Π³Π»Π°Π²Π΅ 12), ΠΈ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² рядС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ситуаций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ большой интСрСс. Из Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… свойств ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β€’ ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ.

β€’ Π‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌ ящиком ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ связаны нСсколько Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (writers) ΠΈ нСсколько ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (readers), Π½ΠΎ ΠΎΠ½ΠΈ часто связаны ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ "ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ" Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.

β€’ Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ) Π½Π΅ извСстно достовСрно, всС Π»ΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ»ΠΈ какая-Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ считывания (сСрвСр) ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ сообщСниС.

β€’ ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² любом мСстС сСти.

β€’ Π Π°Π·ΠΌΠ΅Ρ€ сообщСний ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½.

ИспользованиС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

β€’ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвСр создаСт дСскриптор ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateMailSlot.

β€’ ΠŸΠΎΡΠ»Π΅ этого сСрвСр ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ получСния ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сообщСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ReadFile.

β€’ ΠšΠ»ΠΈΠ΅Π½Ρ‚, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²Π°ΠΌΠΈ записи, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик, Π²Ρ‹Π·Π²Π°Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateFile, ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сообщСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ WriteFile. Π’ случаС отсутствия ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ считывания ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° открытия ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ "имя Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ").

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ всСми сСрвСрами; всС сСрвСры ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ сообщСниС.

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π’ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateFile ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

\\*\mailslot\mailslotname

ΠŸΡ€ΠΈ этом символ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ (*) дСйствуСт Π² качСствС Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ³ΠΎ символа (wildcard), ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ любой сСрвСр Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½Π° β€” Π³Ρ€ΡƒΠΏΠΏΡ‹ систСм, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ назначаСтся администратором сСти. 

ИспользованиС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков

РассмотрСнный ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрный процСссор ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ нСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… способов Π΅Π³ΠΎ использования. Рассмотрим ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сцСнариСв, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π°Π΄Π°Ρ‡Π° обнаруТСния сСрвСра Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ упомянутой ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрной систСмС (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.2 ΠΈ 11.3).

Π‘Π΅Ρ€Π²Π΅Ρ€ прилоТСния (application server), дСйствуя Π² качСствС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (mailslot client), пСриодичСски осущСствляСт ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ рассылку своСго ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Π›ΡŽΠ±ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ прилоТСния (application client), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ трСбуСтся Π½Π°ΠΉΡ‚ΠΈ сСрвСр, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ это имя, дСйствуя Π² качСствС сСрвСра ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков (mailslot server). Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сСрвСр ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΌΠΎΠΆΠ΅Ρ‚ пСриодичСски ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ рассылку своСго состояния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ коэффициСнтС использования, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ. Π­Ρ‚ΠΎ соотвСтствуСт ситуации, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ имССтся ΠΎΠ΄Π½Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚) ΠΈ нСсколько ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сСрвСров). Если Π±Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сСрвСров прилоТСния) Π±Ρ‹Π»ΠΎ нСсколько, Ρ‚ΠΎ ситуация ΠΎΠΏΠΈΡΡ‹Π²Π°Π»Π°ΡΡŒ Π±Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° "ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ".

Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ многочислСнных Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ своСм состоянии. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, элСктронной доскС объявлСний, ΠΎΠΏΡ€Π°Π²Π΄Ρ‹Π²Π°Π΅Ρ‚ использованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик. Оба описанных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования β€” ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ рассылка ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии β€” ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠ³ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий сСрвСр.

ОбмСн ролями Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько ΡΠ±ΠΈΠ²Π°Ρ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ сСрвСр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ CreateNamedPipe (ΠΈΠ»ΠΈ CreateMailSlot), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика) создаСт соСдинСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateFile. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΎΠ±ΠΎΠΈΡ… случаях ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WriteFile выполняСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ReadFile выполняСтся сСрвСром.

ИспользованиС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков Π² соотвСтствии с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈΠ· описанных Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° рис. 11.3.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика

Для создания ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика ΠΈ получСния дСскриптора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² опСрациях ReadFile, ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ сСрвСры (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ считывания) Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateMailslot. На ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколькими систСмами Π² сСти, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ считывания. 

Рис. 11.3. ИспользованиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика для обнаруТСния сСрвСра


HANDLE CreateMailslot(LPCTSTR lpName, DWORD cbMaxMsg, DWORD dwReadTimeout, LPSECURITY_ATTRIBUTES lpsa) 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

lpName β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строку с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

\\.\mailslot\[ΠΏΡƒΡ‚ΡŒ]имя

Имя Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π’ΠΎΡ‡ΠΊΠ° (.) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик создаСтся Π½Π° локальном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.

cbMaxMsg β€” ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСния (Π² Π±Π°ΠΉΡ‚Π°Ρ…), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 0 соотвСтствуСт отсутствиС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

dwReadTimeOut β€” Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° оТидания (Π² миллисСкундах) для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния. Π—Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 0 соотвСтствуСт Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ MAILSLOT_WAIT_FOREVER β€” Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ оТидания (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π»ΠΈΡ‚ΡŒΡΡ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ). 

Π’ΠΎ врСмя открытия ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateFile ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°) ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ имя Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

β€’ \\ .\mailslot\ [ΠΏΡƒΡ‚ΡŒ]имя β€” опрСдСляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ Windows 95 Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° 11 символами.

β€’ \\имя_ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°\mailslot\[ΠΏΡƒΡ‚ΡŒ]имя β€” опрСдСляСт ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик, располоТСнный Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

β€’ \\имя_Π΄ΠΎΠΌΠ΅Π½Π°\mailslot\[ΠΏΡƒΡ‚ΡŒ]имя β€” опрСдСляСт всС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, располоТСнныС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π΄Π°Π½Π½ΠΎΠΌΡƒ Π΄ΠΎΠΌΠ΅Π½Ρƒ. Π’ этом случаС ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСния составляСт 424 Π±Π°ΠΉΡ‚Π°.

β€’ \\*\mailslot\[ΠΏΡƒΡ‚ΡŒ]имя β€” опрСдСляСт всС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, располоТСнныС Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π³Π»Π°Π²Π½ΠΎΠΌΡƒ Π΄ΠΎΠΌΠ΅Π½Ρƒ систСмы. Π’ этом случаС ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСния составляСт 424 Π±Π°ΠΉΡ‚Π°.

НаконСц, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ FILE_SHARE_READ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetMailslotInfo ΠΈ SetMailslotInfΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° свои Π°Π½Π°Π»ΠΎΠ³ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ.

БрСдства, сопоставимыС с ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ ящиками, Π² UNIX ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. Однако для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (broadcast) ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅ (multicast) Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP/IP.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков

Π’ Ρ‚Π°Π±Π». 11.1 свСдСны всС допустимыС Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠΌΠ΅Π½ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ сСрвСрами прилоТСния. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ пСрСчислСны всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ соСдинСния с Π½ΠΈΠΌΠΈ.

Аналогичная информация для ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ‚Π°Π±Π». 11.2. ВспомнитС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΈΠ»ΠΈ сСрвСр) Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚Π΅ΠΌ ΠΆΠ΅ процСссом ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ систСмС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΈΠ»ΠΈ сСрвСр) прилоТСния.


Π’Π°Π±Π»ΠΈΡ†Π° 11.1. Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹: созданиС, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅  

ΠšΠ»ΠΈΠ΅Π½Ρ‚ прилоТСния Π‘Π΅Ρ€Π²Π΅Ρ€ прилоТСния ДСскриптор ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈΠ»ΠΈ соСдинСниС CreateFile CallNamedPipe TransactNamedPipe CreateNamedPipe Имя ΠΊΠ°Π½Π°Π»Π° \\.\имя ΠΊΠ°Π½Π°Π»Π° (ΠΊΠ°Π½Π°Π» являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ) \\имя систСмы\имя ΠΊΠ°Π½Π°Π»Π° (ΠΊΠ°Π½Π°Π» являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ) \\.\имя ΠΊΠ°Π½Π°Π»Π° (ΠΊΠ°Π½Π°Π» создаСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ)

Π’Π°Π±Π»ΠΈΡ†Π° 11.2. ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики: созданиС, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅  

ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠŸΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр ДСскриптор ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика CreateFile CreateMailslot Имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика \\.\имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик являСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ) \\имя систСмы\имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик располагаСтся Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ систСмС) \\*\имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика (всС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ ящики, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ имя) \\.\имя ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика (ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик создаСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: сСрвСр, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ