Реализация синхронного ввода-вывода

октября 12 2009 by admin in Обязательный материал

В этом разделе обсуждаются функции Windows, позволяющие осуществлять синхронный ввод-вывод информации на устройства. Устройством может быть файл, почтовый ящик, канал, сокет и т. д. Ввод-вывод выполняют одни и те же функции независимо от типа устройства.
ReadFile и WriteFile — несомненно, самые простые и распространенные функции для чтения данных с устройств и записи на устройства:
BOOL ReadFile( HANDLE hfile, PVOID pvBuffer, DWORD nNumBytesToRead, PDWORD pdwNumBytes, OVERLAPPED* pOverlapped);
BOOL WriteFile( HANDLE hfile, CONST VOID «pvBuffer, DWORD nNumBytesToWrite, PDWORD pdwNumBytes, OVERLAPPED* pOverlapped);
Параметр hfile — это описатель устройства, к которому осуществляется доступ. Флаг FILE_FLAG_OVERLAPPED при открытии устройства устанавливать не надо, иначе система будет считать, что вам требуется асинхронный ввод-вывод. Параметр pvBuffer указывает на буфер, куда будут считываться данные с устройства, или на буфер, содержимое которого будет записываться на устройство. Параметры nNumBytesToRead и nNumBytesToWrite указывают функциям ReadFile и WriteFile, сколько байт считать с устройства или записать на него.
Параметр pdwNumBytes — это адрес значения типа DWORD, которое устанавливается функцией равным числу байтов, успешно переданных на или с устройства. Парамerp pOverlapped при выполнении синхронного ввода-вывода должен быть равен NULL. При обсуждении асинхронного ввода-вывода мы рассмотрим его подробней.
При успешном завершении функции ReadFile и WriteFile возвращают TRUE. Кстати, ReadFile можно использовать только с устройствами, открытыми с флагом GENERIC_READ, a WriteFile — только с устройствами, открытыми с флагом GENERIC_WRITE.