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

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

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

 while (*targv != '=' && *targv != '\0') {

  Command1[i] = *targv;

  targv++;

  i++;

 }

 Command1[i] = '\0';

 /* ΠŸΡ€ΠΎΠΏΡƒΡΠΊ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. */

 targv = SkipArg(targv);

 CreatePipe(&hReadPipe, &hWritePipe, &PipeSA, 0);

 /* ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ стандартный Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ процСсс. */

 StartInfoCh1.hStdInput = GetStdHandle(STD_INPUT_HANDLE);

 StartInfoCh1.hStdError = GetStdHandle(STD_ERROR_HANDLE);

 StartInfoCh1.hStdOutput = hWritePipe;

 StartInfoCh1.dwFlags = STARTF_USESTDHANDLES;

 CreateProcess(NULL, (LPTSTR)Command1, NULL, NULL, TRUE /* Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дСскрипторы. */, 0, NULL, NULL, &StartInfoCh1, &ProcInfo1);

 CloseHandle(ProcInfo1.hThread);

 /* Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ дСскриптор записи ΠΊΠ°Π½Π°Π»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вторая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠ³Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°. */

 CloseHandle(hWritePipe);

 /* ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (симмСтричным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ) для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ процСсса. */

 StartInfoCh2.hStdInput = hReadPipe;

 StartInfoCh2.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);

 StartInfoCh2.hStdError = GetStdHandle(STD_ERROR_HANDLE);

 StartInfoCh2.dwFlags = STARTF_USESTDHANDLES;

 CreateProcess(NULL, (LPTSTR)targv, NULL, NULL, TRUE, 0, NULL, NULL, &StartInfoCh2, &ProcInfo2);

 CloseHandle(ProcInfo2.hThread);

 CloseHandle(hReadPipe);

 /* ΠžΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ процСссов. */

 WaitForSingleObject(ProcInfo1.hProcess, INFINITE);

 CloseHandle(ProcInfo1.hProcess);

 WaitForSingleObject(ProcInfo2.hProcess, INFINITE);

 CloseHandle(ProcInfo2.hProcess);

 return 0;

}

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ (named pipes) ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ряд возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² качСствС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС IPC, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ прилоТСния, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ сСтСвого доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрныС систСмы[31], хотя для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ простых Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² IPC, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ взаимодСйствиС процСссов ограничиваСтся Ρ€Π°ΠΌΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠΉ систСмы, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ достаточно. К числу упомянутых возмоТностСй (Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… обСспСчиваСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) относятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β€’ Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΠΎΠ±ΠΌΠ΅Π½ сообщСниями, поэтому процСсс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ посланы процСссом, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΌ запись.

β€’ Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΌΠ΅ΠΆΠ΄Ρƒ двумя процСссами посрСдством СдинствСнного ΠΊΠ°Π½Π°Π»Π°.

β€’ Π”опускаСтся сущСствованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСзависимых экзСмпляров ΠΊΠ°Π½Π°Π»Π°, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. НапримСр, с СдинствСнной сСрвСрной систСмой ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°Π½Π°Π»Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнный экзСмпляр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΠΈ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΆΠ΅ ΠΊΠ°Π½Π°Π» для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

β€’ ΠšΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· систСм, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΊ сСти, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠ°Π½Π°Π»Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ имя. ВзаимодСйствиС посрСдством ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° осущСствляСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для процСссов, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ°ΠΊ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅, Ρ‚Π°ΠΊ ΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ….

β€’ Π˜ΠΌΠ΅Π΅Ρ‚ся нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ связных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… обслуТиваниС взаимодСйствия "запрос/ΠΎΡ‚Π²Π΅Ρ‚" ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных соСдинСний.

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

ИспользованиС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ²

Ѐункция CreateNamedPipe создаСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ экзСмпляр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ указываСтся Ρ‚Π°ΠΊΠΆΠ΅ максимально допустимоС количСство экзСмпляров ΠΊΠ°Π½Π°Π»ΠΎΠ², Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ количСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², одноврСмСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обСспСчСна.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ процСсс рассматриваСтся Π² качСствС сСрвСра. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмах, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ°Π½Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateFile.

На рис. 11.2 Π² ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ прСдставлСны ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ "ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр", Π° Ρ‚Π°ΠΊΠΆΠ΅ псСвдокод, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… схСм примСнСния ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ сСрвСр создаСт мноТСство экзСмпляров ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π½Π°Π»Π°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° сСрвСр создаСт ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сущСствуСт Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ экзСмпляр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, рис. 11.2 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ модСль ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ сСрвСра, Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° рис. 7.1.

Рис. 11.2. ВзаимодСйствиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² с сСрвСром Ρ‡Π΅Ρ€Π΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ²

Π‘Π΅Ρ€Π²Π΅Ρ€Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСмы Π½Π° основС Windows NT (ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, здСсь ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ вСрсия 4.0 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅); систСмы Π½Π° Π±Π°Π·Π΅ Windows 9x ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€ΠΎΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateNamedPipe прСдставлСн Π½ΠΈΠΆΠ΅.

HANDLE CreateNamedPipe(LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, LPSECURITY ATTRIBUTES lpSecurityAttributes) 

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

lpName β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° имя ΠΊΠ°Π½Π°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

\\.\pipe\[path]pipename

Π’ΠΎΡ‡ΠΊΠ° (.) ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. 

dwOpenMode β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π»Π°Π³ΠΎΠ²:

β€’ PIPE_ACCESS_DUPLEX β€” этот Ρ„Π»Π°Π³ эквивалСнтСн ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ GENERIC_READ ΠΈ GENERIC_WRITE.

β€’ PIPE_ACCESS_INBOUND β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ сСрвСру; эквивалСнтно GENERIC_READ.

β€’ PIPE_ACCESS_OUTBOUND β€” этот Ρ„Π»Π°Π³ эквивалСнтСн GENERIC_WRITE.

ΠŸΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ значСния FILE_FLAG_WRITE_THROUGH (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ сообщСний) ΠΈ FILE_FLAG_OVERLAPPED (ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 14).

dwPipeMode β€” ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π­Ρ‚ΠΈ значСния ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π»ΠΈ запись Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с сообщСниями ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π»ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с сообщСниями ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния.

β€’ PIPE_TYPE_BYTE ΠΈ PIPE_TYPE_MESSAGE β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, соотвСтствСнно, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π½Π°Π» ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ сообщСния. Для всСх экзСмпляров ΠΊΠ°Π½Π°Π»ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

β€’ PIPE_READMODE_BYTE ΠΈ PIPE_READMODE_MESSAGE β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, соотвСтствСнно, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ сообщСния. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PIPE_READMODE_MESSAGE Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования значСния PIPE_TYPE_MESSAGE.

β€’ PIPE_WAIT ΠΈ PIPE_NOWAIT β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, соотвСтствСнно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ опСрация ReadFile. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PIPE_WAIT, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для обСспСчСния асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ способы.

nMaxInstances β€” опрСдСляСт количСство экзСмпляров ΠΊΠ°Π½Π°Π»ΠΎΠ², Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ количСство ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 11.2, ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateNamedPipe для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ОБ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π° основании доступных систСмных рСсурсов, слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ PIPE_UNLIMITED_INSTANCES.

nOutBufferSize ΠΈ nInBufferSize β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ (Π² Π±Π°ΠΉΡ‚Π°Ρ…) Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.

nDefaultTimeOut β€” Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° оТидания ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π² миллисСкундах) для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ WaitNamedPipe, которая обсуТдаСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. Π­Ρ‚Π° ситуация, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ функция, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, устанавливаСт ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» оТидания для родствСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ.

Π’ случаС ошибки возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ INVALID_HANDLE_VALUE, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ дСскрипторы ΠΊΠ°Π½Π°Π»ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ дСскрипторам Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ создания ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows 9x, которая Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС сСрвСра ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ NULL, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠΉ.

lpSecurityAttributes β€” ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл, Ρ‡Ρ‚ΠΎ ΠΈ Π² случаС любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ CreateNamedPipe происходит созданиС самого ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, Π° Π½Π΅ просто Π΅Π³ΠΎ экзСмпляра. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ послСднСго ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ дСскриптора экзСмпляра ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ этого экзСмпляра (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ сущСствуСт ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ дСскриптору Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр). Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ послСднСго экзСмпляра ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ самого ΠΊΠ°Π½Π°Π»Π°, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ имя ΠΊΠ°Π½Π°Π»Π° становится вновь доступным для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования.