10.11. ΠΠ° web-ΡΠ°ΠΉΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ» multisem.c, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΈΠΌΠΈΡΠΈΡΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ Windows (ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠ³ΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΈ Π΄Π»Ρ Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΉΠ» ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ TestMultiSem.c. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊ Π² Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ? ΠΠΎΠ²ΡΡΠ°Π΅ΡΡΡ Π»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CRITICAL_SECTION? Π§ΡΠΎ Π·Π΄Π΅ΡΡ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΎΠ»ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ?
10.12. ΠΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ, ΡΡΡΠ»Π°ΡΡΡ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ, ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ Π΄Π΅ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° Web-ΡΠ°ΠΉΡΠ΅.
10.13. ΠΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ ΡΡΠ°ΡΡΠ΅ΠΉ Π¨ΠΌΠΈΠ΄ΡΠ° ΠΈ ΠΡΡΡΠ°Π»ΠΈ "Strategies for Implementing POSIX Condition Variables in Win32" ("Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ POSIX Π² Win32") (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» "ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ°"). ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²ΠΈΡ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ, ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ² ΠΊ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ (ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ "ΠΈΠ΄ΠΈΠΎΠΌΠ°ΠΌΠΈ" ("idioms")), ΡΠΈΠ³ΡΡΠΈΡΡΡΡΠΈΠΌ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ Π½Π΅ ΡΠΌΡΠ»ΠΈΡΡΡΡΡΡ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π¨ΠΌΠΈΠ΄Ρ ΠΈ ΠΡΡΡΠ°Π»ΠΈ ΡΠΌΡΠ»ΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
10.14. ΠΠ°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° web-ΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ batons ΠΈ batonsmultipleevents Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ°Ρ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Ρ Π΄ΡΡΠ³ΠΈΡ Π°Π²ΡΠΎΡΠΎΠ² Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΠΊΠΎΠ΄. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ±ΡΠ°Π½ ΡΠ·ΡΠΊ C++, ΡΡΠΎ Π΄Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² C++ (Standard Template Library, STL). ΠΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΈ ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠΈ Π΄Π²Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠΎΡΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ STL.
ΠΠΠΠΠ 11
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ
Π Π³Π»Π°Π²Π΅ 6 Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π³Π»Π°Π²Ρ 7β10 Π±ΡΠ»ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΡ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠΈΠΆΠ΅ Π²Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΠ΅ΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ (Interprocess Communication, IPC)[30], Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°ΠΌ. ΠΠ²ΡΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ Windows, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΌΠΈ IPC, ΡΠ²Π»ΡΡΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π²Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ReadFile ΠΈ WriteFile. ΠΡΠΎΡΡΡΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΏΠΎΠ»ΡΠ΄ΡΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π΅Π»Π°ΡΡ ΠΈΡ ΡΠ΄ΠΎΠ±Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π²Ρ ΠΎΠ΄ Π΄ΡΡΠ³ΠΎΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² UNIX. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ.
ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ³Π°ΡΠ΅. ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π΄ΡΠΏΠ»Π΅ΠΊΡΠ½ΡΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΊΡΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ². Π ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π΅Π»Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΡΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅ΠΌΡΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΈΡ. 7.1, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°Π»ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ "ΠΏΠΎΡΠΎΠΊ/ΠΊΠ»ΠΈΠ΅Π½Ρ" ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΡΠΎ Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡΠ»ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅ "ΠΎΠ΄ΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΈΠΌ", Π° ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ (anonymous channels) Windows ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ (ΠΏΠΎΠ»ΡΠ΄ΡΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ΅) ΠΏΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°: Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ΅Π½ΠΈΡ (read handle) ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π·Π°ΠΏΠΈΡΠΈ (write handle). Π€ΡΠ½ΠΊΡΠΈΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ, ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
BOOL CreatePipe(PHANDLE phRead, PHANDLE phWrite, LPSECURITY_ATTRIBUTES lpsa, DWORD cbPipe)
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΡΠ°ΡΡΠΎ Π±ΡΠ²Π°ΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠΌΠΈ; ΠΏΡΠΈΡΠΈΠ½Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π½ΡΡ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° cbPipe, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° Π² Π±Π°ΠΉΡΠ°Ρ , Π½ΠΎΡΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ, ΠΏΡΠΈΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 0 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π§ΡΠΎΠ±Ρ ΠΊΠ°Π½Π°Π» ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ IPC, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΊΠ°Π½Π°Π»Π°. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ CreatePipe, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ. Π’ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ΅Π½ΠΈΡ (phRead). Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠΎ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π² ΡΡΡΡΠΊΡΡΡΠ΅ STARTUPINFO Π΄Π»Ρ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ°Π²Π½ΡΠΌ *phRead.
Π§ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°Π½Π°Π»Π° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠ°Π½Π°Π» ΠΏΡΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΠΎ ΡΡΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π² ΠΊΠ°Π½Π°Π»Π΅, Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ReadFile. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π² Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π», ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΡΡΠ΅ΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ»Ρ Π΄Π²ΡΡ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π²Π° ΠΊΠ°Π½Π°Π»Π°.
ΠΡΠΈΠΌΠ΅Ρ: ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.1 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΡ ΠΊΠ°Π½Π°Π»ΠΎΠΌ. Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠ°Π½Π°Π» ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΊΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π½Π° Π΄Π²Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°; ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Π³Π»Π°Π²Π΅ 6.
ΠΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° WriteFile Π² Π±Π»ΠΎΠΊΠ΅ Program2 Π½Π° ΡΠΈΡ. 11.1 ΡΠΏΡΠ°Π²Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ , ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡ , ΠΈ Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. ΠΡΡ Π·Π°ΠΏΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π°, Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ.
Π ΠΈΡ. 11.1. ΠΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠ° ΡΠΈΡ. 11.1 Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π½Π΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.1. Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΠΎΠ±Ρ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ³ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΌΠ΅ΡΠΊΡ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΡΠΌΠΎΠ³ Π±Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠ»Π° Π±Ρ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.1 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ: Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ =, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΌ ΠΊΠ°Π½Π°Π». ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΡ (|) ΠΏΡΠΈΠ²Π΅Π»ΠΎ Π±Ρ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ. Π ΠΈΡΡΠ½ΠΎΠΊ 11.1 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ pipe Program1 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ = Program2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ΅Π΄ΡΡΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° UNIX ΠΈΠ»ΠΈ Windows ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π»Π° Π±Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
$ Program1 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ | Program2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 11.1. pipe: ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²#include "EvryThng.h"
int _tmain(int argc, LPTSTR argv[])
/* Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°Π½Π°Π»Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅: pipe ΠΊΠΎΠΌΠ°Π½Π΄Π°1 = ΠΊΠΎΠΌΠ°Π½Π΄Π°2 */
{
DWORD i = 0;
HANDLE hReadPipe, hWritePipe;
TCHAR Command1[MAX_PATH];
SECURITY_ATTRIBUTES PipeSA = /* ΠΠ»Ρ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ². */
{sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};
PROCESS_INFORMATION ProcInfo1, ProcInfo2;
STARTUPINFO StartInfoCh1, StartInfoCh2;
LPTSTR targv = SkipArg(GetCommandLine());
GetStartupInfo(&StartInfoCh1);
GetStartupInfo(&StartInfoCh2);
/* ΠΠ°ΠΉΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ» "=", ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠΉ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. */
while (*targv != '=' && *targv != '\0') {
Command1[i] = *targv;