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

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

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

Π’ 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, Π΄Π°ΠΆΠ΅ Ссли устройство ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.