Π Windows ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π³ΡΡΠΏΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Unicode. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅Π³ΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ. Π’ΠΈΠΏΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CharUpper, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠ°ΠΊ ΠΊ ΡΡΡΠΎΠΊΠ°ΠΌ, ΡΠ°ΠΊ ΠΈ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ, ΠΈ ΡΡΠ½ΠΊΡΠΈΡ IsCharAlphaNumeric. Π ΡΠΈΡΠ»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ CompareString (ΡΡΠΈΡΡΠ²Π°ΡΡΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ) ΠΈ ΡΡΠ½ΠΊΡΠΈΡ MultiByteToWideChar. ΠΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Windows 3.1 ΠΈ 9Ρ ΡΠ°ΡΡΠΈΡΡΡΡ Π½Π°Π±ΠΎΡΡ 8-Π±ΠΈΡΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΡΠ·ΡΠΊΠ°Ρ Π΄Π°Π»ΡΠ½Π΅Π²ΠΎΡΡΠΎΡΠ½ΡΡ ΡΡΡΠ°Π½, ΡΠ΄Π²ΠΎΠ΅Π½Π½ΡΠ΅ Π±Π°ΠΉΡΡ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΠΎΠΈΡ ΡΠΈΠΏΠΎΠ², Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘ (_tprintf ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π΅ΠΉ), ΡΠ°ΠΊ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Windows (CharUpper ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π΅ΠΉ). ΠΡΠΈΠΌΠ΅ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π‘.
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Main
ΠΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π‘-ΡΡΠ½ΠΊΡΠΈΠΈ main Ρ Π΅Π΅ ΡΠΏΠΈΡΠΊΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (argv[]) ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ _tmain. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ _UNICODE ΠΌΠ°ΠΊΡΠΎΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ Π΄ΠΎ main, Π»ΠΈΠ±ΠΎ Π΄ΠΎ wmain. _tmain ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ <tchar.h>, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΠΉΠ»Π° <windows.h>. Π’ΠΎΠ³Π΄Π° ΡΠΈΠΏΠΈΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
#include <windows.h>
#include <tchar.h>
int _tmain(int argc, LPTSTR argv[]) {
β¦
}
Π Microsoft Π‘ ΡΡΠ½ΠΊΡΠΈΡ _tmain ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΡΡΡΠΎΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊΠΎΠ΅ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ Π² UNIX.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ CreateFile. ΠΡΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ UNICODE ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, ΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ CreateFileA, Π° Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° β ΡΠΎ ΠΊΠ°ΠΊ CreateFileW. Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΠΈ 8-Π±ΠΈΡΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠ°ΠΊΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile, ΡΠΎ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΎΠ± ΡΡΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π±ΡΠ΄ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFileA ΠΈΠ»ΠΈ CreateFileW.
Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Unicode
ΠΡΠΈΡΡΡΠΏΠ°Ρ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π² Windows, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ.
1. Π’ΠΎΠ»ΡΠΊΠΎ 8-Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠ³Π½ΠΎΡΠΈΡΡΠΉΡΠ΅ Unicode ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΊ printf, atoi ΠΈ strcmp, ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ char (ΠΈΠ»ΠΈ CHAR) ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π‘.
2. 8-Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π½ΠΎ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Unicode. Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΠ°Π½Π΅Π΅ Π΄Π°Π½Π½ΡΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ UNICODE ΠΈ _UNICODE Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΠΌΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ.
3. Π’ΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Unicode. Π‘Π»Π΅Π΄ΡΠΉΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΠΌΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΎΠ±Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ UNICODE ΠΈ _UNICODE. ΠΡΡΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ ΡΠΎΡΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΡΠΌΠΎΠ³ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows 9x.
4. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Unicode ΠΈ 8-Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΈΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΊΠ°ΠΊ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Unicode, ΡΠ°ΠΊ ΠΈ Ρ ASCII-ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ².
ΠΠ°ΠΊ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΉ, ΡΡΠ° ΠΌΠ΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.2 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
Π‘ΡΠ°Π½Π΄Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ POSIX XPG4, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ°ΠΌΠΈ UNIX, ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Unicode. ΠΠΎΠΌΠΈΠΌΠΎ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅Π³ΠΎ, ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΠΎΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ 4, 3 ΠΈΠ»ΠΈ 1 Π±Π°ΠΉΡΠ°ΠΌΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Microsoft Π‘ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘, ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅. Π’Π°ΠΊ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» <wchar.h> ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ _tsetlocale. Π Windows NT ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Unicode, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Windows 9x ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ (ΡΠΌΠ΅ΡΡ 8β ΠΈ 16-Π±ΠΈΡΠΎΠ²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²), ΡΡΠΎ ΠΈ Π² Windows 3.1.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄
ΠΠ°ΠΊ ΠΈ Π² UNIX, Π² Windows ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΡΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ (input), Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ (output) ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ (error). Π UNIX Π΄Π»Ρ ΡΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² (0, 1 ΠΈ 2), ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Windows Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΠΈΠΏΠ° HANDLE, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
HANDLE GetStdHandle(DWORD nStdHandle)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΈΠ½Π°ΡΠ΅ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ INVALID_HANDLE_VALUE.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠ°ΡΠ°ΠΌΠ΅ΡΡ nStdHandle Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
β’ STD_INPUT_HANDLE
β’ STD_OUTPUT_HANDLE
β’ STD_ERROR_HANDLE
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠ°ΡΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ GetStdHandle Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΈΠ»ΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°. ΠΠ°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π½ΠΈΠΆΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π½ΠΎ Π½Π΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ.
BOOL SetStdHandle(DWORD nStdHandle, HANDLE hHandle)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β TRUE, ΠΈΠ½Π°ΡΠ΅ β FALSE.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° nStdHandle ΡΡΠ½ΠΊΡΠΈΠΈ SetStdHandle ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌΠΈ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ GetStdHandle. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ hHandle ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΡΠΊΡΡΡΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ SetStdHandle ΠΈ GetStdHandle. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ Π²Π²ΠΎΠ΄Π°/ Π²ΡΠ²ΠΎΠ΄Π°.
ΠΠ»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌΡ Π²Π²ΠΎΠ΄Ρ (ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅) ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌΡ Π²ΡΠ²ΠΎΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π²Π° Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π½ΠΈ: "CONIN$" ΠΈ "CONOUT$". Π ΠΎΠ»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°, Π²ΡΠ²ΠΎΠ΄Π° ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Ρ; Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈΡΡ ΠΎΡΠΊΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² "CONIN$" ΠΈ "CONOUT$", Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ CreateFile.
Π UNIX ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² (ΡΠΌ. [40], ΡΡΡ. 61β64).
ΠΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠΌ ΠΈ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ dup Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π° Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ (ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ 0) ΠΎΡΠΊΡΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ ΠΊΠ°ΠΊ fd_redirect. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
close (STDIN_FILENO);
dup (fd_redirect);
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ dup2, Π° ΡΡΠ΅ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π²ΡΠ·ΠΎΠ² Π·Π°ΠΌΡΡΠ»ΠΎΠ²Π°ΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ fcntl Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ F_DUPFD.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ReadFile ΠΈ WriteFile, Π½ΠΎ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ReadConsole ΠΈ WriteConsole. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡ Π½Π΅ Π±Π°ΠΉΡΠ°ΠΌΠΈ, Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ (TCHAR), ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SetConsoleMode.
BOOL SetConsoleMode(HANDLE hConsoleHandle, DWORD fdevMode)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: ΡΠΎΠ³Π΄Π°, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ β TRUE, ΠΈΠ½Π°ΡΠ΅ β FALSE.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡhConsoleHandle β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π±ΡΡΠ΅ΡΠ° Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈΠ»ΠΈ Π±ΡΡΠ΅ΡΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° GENERIC_WRITE, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.