Стандартни устройства и конзолен вход

устройства

Тази книга се фокусира върху разработването на приложения, използващи API на операционните системи на Microsoft (Windows 9x, Windows XP, Windows 2000 и Windows Server 2003). Той се фокусира върху основните системни услуги, включително файлова система, управление на процеси и нишки, междупроцесната комуникация, мрежово програмиране и синхронизация. Разглежда се техниката на пренасяне на приложения, написани в средата Win32, в средата Win64. Всички аспекти на сигурността на Windows и нейното практическо приложение са описани подробно. Изобилието от реални примери, достъпни и на уебсайта на книгата, правят материала лесно смилаем.

Книгата е насочена към разработчици и програмисти, както висококвалифицирани, така и начинаещи, а също така ще бъде полезна за студенти от съответните специалности.

Book: Системно програмиране в Windows

Стандартни устройства и конзолни I/O

Раздели на тази страница:

Стандартни устройства и конзолни I/O

Както в UNIX, Windows предоставя три стандартни устройства, съответно за въвеждане, извеждане и съобщения за грешки. UNIX използва стойностите на файловия дескриптор (0, 1 и 2), известни на системата за тези устройства, но Windows има достъп до стандартни устройства, използващи HANDLE дескриптори, за които е предвидена специална функция.

HANDLE GetStdHandle (DWORD nStdHandle)

Върната стойност: при успех, валиден манипулатор, в противен случай INVALID_HANDLE_VALUE.

Параметърът nStdHandle трябва да бъде една от следните стойности:

• STD_INPUT_HANDLE
• STD_OUTPUT_HANDLE
• STD_ERROR_HANDLE

Конзолата и клавиатурата обикновено се задават като стандартни устройства. Стандартните I/O могат да бъдат пренасочени към други устройства.

Извикването на функцията GetStdHandle не създава нови или дублира съществуващи стандартни дескриптори на устройства. Последователните обаждания със същото устройство като аргумента ще върнат същата стойност на дескриптора. Затварянето на дръжка към стандартно устройство прави това устройство недостъпно за по-нататъшна употреба. Поради тази причина в примерите по-долу често ще отваряме стандартния дескриптор на устройство, но няма да го затваряме.

BOOL SetStdHandle (DWORD nStdHandle, HANDLE hHandle)

Върната стойност: при успех - ИСТИНА, в противен случай - ФАЛША.

Валидните стойности за параметъра nStdHandle на функцията SetStdHandle са същите като за функцията GetStdHandle. Параметърът hHandle указва отворения файл, който ще бъде присвоен като устройство по подразбиране.

Един от методите за пренасочване на стандартни I/O са последователни повиквания към функциите SetStdHandle и GetStdHandle. Полученият дескриптор се използва при последващи I/O операции.

Има две запазени имена за определяне на пътищата за достъп до конзолния вход (клавиатура) и конзолния изход: „CONIN $“ и „CONOUT $“. Ролята на стандартните устройства за въвеждане, извеждане и извеждане на грешки първоначално се възлага на конзолата. Конзолата обаче може да се използва дори след като I/O операциите, които изискват стандартни устройства, са били пренасочени; всичко, което трябва да направите, е да отворите дескриптори за файловете "CONIN $" и "CONOUT $", като извикате функцията CreateFile.

В UNIX стандартните I/O могат да бъдат пренасочени по един от трите начина (вж. [40], стр. 61-64).

Първият метод е индиректен и разчита на функцията dup, връщаща най-ниския наличен номер на дескриптор на файла. Да предположим, че искате да пренасочите стандартния вход (дескриптор на файл 0) към отворен файл, описан като fd_redirect. След това можете да напишете следния код:

затваряне (STDIN_FILENO);
дуп (fd_redirect);

Вторият метод използва функцията dup2, а третият метод извива извитата претоварена функция fcntl, използвайки стойността F_DUPFD като параметър.