На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

ReadFileEx



The ReadFileEx function reads data from a file asynchronously. It is designed solely for asynchronous operation, unlike the ReadFile function, which is designed for both synchronous and asynchronous operation. ReadFileEx lets an application perform other processing during a file read operation.

The ReadFileEx function reports its completion status asynchronously, calling a specified completion routine when reading is completed and the calling thread is in an alertable wait state.

BOOL ReadFileEx(

HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer
DWORD nNumberOfBytesToRead, // number of bytes to read
LPOVERLAPPED lpOverlapped, // address of offset
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // address of completion routine
);


Parameters

hFile

An open handle that specifies the file entity to be read from. This file handle must have been created with the FILE_FLAG_OVERLAPPED flag and must have GENERIC_READ access to the file.
Windows NT: hFile can be any handle opened with the FILE_FLAG_OVERLAPPED flag by the CreateFile function, or a socket handle returned by the socket or accept functions.
Windows 95: hFile can be a communications resource, mailslot, or named pipe handle opened with the FILE_FLAG_OVERLAPPED flag by CreateFile, or a socket handle returned by the socket or accept functions. Windows 95 does not support asynchronous operations on disk files.

lpBuffer

Points to a buffer that receives the data read from the file.
This buffer must remain valid for the duration of the read operation. The application should not use this buffer until the read operation is completed.

nNumberOfBytesToRead

Specifies the number of bytes to be read from the file.

lpOverlapped

Points to an OVERLAPPED data structure that supplies data to be used during the asynchronous (overlapped) file read operation.

If the file specified by hFile supports the concept of byte offsets, the caller of ReadFileEx must specify a byte offset within the file at which reading should begin. The caller specifies the byte offset by setting the OVERLAPPED structure's Offset and OffsetHigh members.
If the file entity specified by hFile does not support the concept of byte offsets ѕ for example, if it is a named pipe ѕ the caller must set the Offset and OffsetHigh members to zero, or ReadFileEx fails.

The ReadFileEx function ignores the OVERLAPPED structure's hEvent member. An application is free to use that member for its own purposes in the context of a ReadFileEx call. ReadFileEx signals completion of its read operation by calling, or queueing a call to, the completion routine pointed to by lpCompletionRoutine, so it does not need an event handle.
The ReadFileEx function does use the OVERLAPPED structure's Internal and InternalHigh members. An application should not set these members.

The OVERLAPPED data structure pointed to by lpOverlapped must remain valid for the duration of the read operation. It should not be a variable that can go out of scope while the file read operation is in progress.

lpCompletionRoutine

Points to the completion routine to be called when the read operation is complete and the calling thread is in an alertable wait state. For more information about the completion routine, see FileIOCompletionRoutine.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
If the function succeeds, the calling thread has an asynchronous I/O (input/output) operation pending: the overlapped read operation from the file. When this I/O operation completes, and the calling thread is blocked in an alertable wait state, the system calls the function pointed to by lpCompletionRoutine, and the wait state completes with a return code of WAIT_IO_COMPLETION.

If the function succeeds, and the file reading operation completes, but the calling thread is not in an alertable wait state, the system queues the completion routine call, holding the call until the calling thread enters an alertable wait state. For information about alertable waits and overlapped input/output operations, see Synchronization and Overlapped Input and Output.
If ReadFileEx attempts to read past the end of the file, the function returns zero, and GetLastError returns ERROR_HANDLE_EOF.

Remarks

If a portion of the file specified by hFile is locked by another process, and the read operation specified in a call to ReadFileEx overlaps the locked portion, the call to ReadFileEx fails.
If ReadFileEx attempts to read data from a mailslot whose buffer is too small, the function returns FALSE, and GetLastError returns ERROR_INSUFFICIENT_BUFFER.
Applications must not read from nor write to the input buffer that a read operation is using until the read operation completes. A premature access to the input buffer may lead to corruption of the data read into that buffer.

The ReadFileEx function may fail if there are too many outstanding asynchronous I/O requests. In the event of such a failure, GetLastError can return ERROR_INVALID_USER_BUFFER or ERROR_NOT_ENOUGH_MEMORY.
To cancel all pending asynchronous I/O operations, use the CancelIO function. This function only cancels operations issued by the calling thread for the specified file handle. I/O operations that are canceled complete with the error ERROR_OPERATION_ABORTED.

If hFile is a handle to a named pipe or other file entity that doesn't support the byte-offset concept, the Offset and OffsetHigh members of the OVERLAPPED structure pointed to by lpOverlapped must be zero, or ReadFileEx fails.
An application uses the MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx, and SleepEx functions to enter an alertable wait state. For more information about alertable waits and overlapped input/output, refer to those functions' reference and Synchronization.

Windows 95: On this platform, neither ReadFileEx nor WriteFileEx can be used by the comm ports to communicate. However, you can use ReadFile and WriteFile to perform asynchronous communication.

See Also

CancelIo, CreateFile, FileIOCompletionRoutine, MsgWaitForMultipleObjectsEx, OVERLAPPED, ReadFile, SleepEx, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFileEx


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

ReadFileEx



Функция ReadFileEx читает данные из файла асинхронно. Разработано исключительно для асинхронной операции, в отличие от функции ReadFile, которая разработана для как синхронной так и асинхронной операции. ReadFileEx ПОЗВОЛЯЕТ, приложение выполняет другую обработку в течение файла прочитавшего операцию.

Функция ReadFileEx сообщает свой статус завершения асинхронно, вызывающий определенную программу завершения когда чтение завершено и вызывающая резьба - в состоянии ожидания alertable.

BOOL ReadFileEx(

РУЧКА hFile, // ручка файла, чтобы читать LPVOID lpBuffer, // адрес буфера DWORD nNumberOfBytesToRead, // количества байтов, чтобы читать LPOVERLAPPED lpOverlapped, // адрес адреса смещения LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // программы завершения
);


Параметры

hFile

Открытая ручка, которая определяет файловый объект, который нужно быть прочитан из. Эта файловая ручка по-видимому создана флагом FILE_FLAG_OVERLAPPED и должно иметь доступ GENERIC_READ к файлу.
Windows NT: hFile может быть любой ручкой открытой флагом FILE_FLAG_OVERLAPPED функцией CreateFile, или ручка розетки возвращалась розеткой или принимала функции.
Windows 95: hFile может быть ресурсом связи, mailslot, или назвавшее ручку трубы открывался флагом FILE_FLAG_OVERLAPPED CreateFile, или ручка розетки возвращалась розеткой или принимала функции. Windows 95 не поддерживает асинхронные операции в дисковых файлах.

lpBuffer

Точки на буфер, которые получают данные прочитанные из файла.
Этот буфер должен остаться в силе в течение операции чтения. Приложение не должно использовать этот буфер пока операция чтения не будет завершена.

nNumberOfBytesToRead

Определяет количество байтов, которые нужно быть прочитаны из файла.

lpOverlapped

Точки на ПЕРЕКРЫТУЮ структуру данных, которые поставляют данные, которые нужно использоваться в течение асинхронного файла (перекрытый) был прочитан операция.

Если файл определенный hFile поддерживает понятие байтовых смещений, вызывающий оператор ReadFileEx должен определить байтовое смещение в пределах файла в котором чтение должно начинаться. Вызывающий оператор определяет байтовое смещение устанавливая ПЕРЕКРЫТОЕ структурное Смещение и участников OffsetHigh.
Если файловый объект определялся бы hFile не поддерживает понятие байтовых смещений U например, если он - поименованная труба U вызывающий оператор должен установить Смещение и участников OffsetHigh нуля, или ReadFileEx терпит неудачу.

Функция ReadFileEx игнорирует ПЕРЕКРЫТЫЙ структурный элемент hEvent. Приложение свободно, чтобы использовать этот элемент для своих собственных целей в контексте вызова ReadFileEx. ReadFileEx СИГНАЛИЗИРУЕТ завершение своей читанной операции вызывая, или ставя в очередь вызов на, программа завершения указывалась, чтобы lpCompletionRoutine, так что ему не нужно ручка события.
Функция ReadFileEx использует ПЕРЕКРЫТЫЙ структура Внутренние и участники InternalHigh. Приложение не должно устанавливать этих участников.

ПЕРЕКРЫТАЯ структура данных указанная, чтобы lpOverlapped должна остаться в силе в течение операции чтения. Это не должно быть переменной, которая может выходить из области тогда как файл прочитавший операцию осуществляется.

lpCompletionRoutine

Точки на программу завершения, которые нужно быть названы когда операция чтения завершенна и вызывающая резьба - в состоянии ожидания alertable. Более подробно о программе завершения, смотри FileIOCompletionRoutine.



Обратные Величины

Если функция добивается успеха, обратная величина ненулевая.
Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы расширять информацию ошибки, назовите GetLastError.
Если функция добивается успеха, вызывающая резьба имеет асинхронную В/В операцию (ввод/выход) рассматривать: перекрытая операция чтения из файла. Когда эта операция В/В завершается, и вызывающая резьба заблокирована в состоянии ожидания alertable, система называет функцию указанную, чтобы lpCompletionRoutine, и состояние ожидания завершается с обратным кодом WAIT_IO_COMPLETION.

Если функция добивается успеха, и файл, читающий операцию завершается, но вызывающая резьба - не в состоянии ожидания alertable, система ставит в очередь обычный вызов завершения, удерживающий вызов пока вызов резьбы не введет состояние ожидания alertable. Для информации о alertable ожидания и перекрывшей ввод/выходные операции, смотри Синхронизацию и Перекрывшую Ввод и Выход.
Если попытки ReadFileEx, чтобы читать прошлому конец файла, функция возвращает нуль, и возврат GetLastError ERROR_HANDLE_EOF.

Замечания

Если часть файла определенного hFile заперта другим процессом, и операцией чтения определенными на вызове на ReadFileEx перекрывает закрытую часть, вызов на ReadFileEx терпит неудачу.
Если попытки ReadFileEx, чтобы читать данные из mailslot чей буфер слишком небольшой, функция возвращает ЛОЖЬ, и возврат GetLastError ERROR_INSUFFICIENT_BUFFER.
Приложения по-видимому не прочитаются из ни записываются в входной буфер, что операция чтения использует пока операция чтения не завершится. Преждевременный доступ к входному буферу может провести к коррупции данных прочитанных в этот буфер.

Функция ReadFileEx может потерпеть неудачу если есть слишком много выдающиеся асинхронные запросы В/В. В случае такой неудачи, GetLastError может возвращать ERROR_INVALID_USER_BUFFER или ERROR_NOT_ENOUGH_MEMORY.
Для того, чтобы отменять все незаконченные асинхронные операции В/В, используйте функцию CancelIO. Эта функция только отменяет операции выпущенные вызовом резьбы для определенной файловой ручки. ОПЕРАЦИИ В/В, которые отменены кончать с ошибкой ERROR_OPERATION_ABORTED.

Если hFile - ручка в поименованной трубе или другой файловый объект, что не поддерживает байтовое смещение понятия, Смещение и участники OffsetHigh ПЕРЕКРЫТОЙ структуры указанной, чтобы lpOverlapped должны быть нуль, или ReadFileEx терпит неудачу.
Приложение использует MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, WaitForMultipleObjectsEx, и функции SleepEx, чтобы вводить состояние ожидания alertable. Более подробно о alertable ожиданиях и перекрывших ввод/выход, ссылаться на те функции' ссылка и Синхронизация.

Windows 95: На этой платформе, ни ReadFileEx ни WriteFileEx может быть использован портами comm, чтобы связываться. Тем не менее, Вы можете использовать ReadFile и WriteFile, чтобы выполнять асинхронную связь.

Смотри Также

CancelIo, CreateFile, FileIOCompletionRoutine, MsgWaitForMultipleObjectsEx, ПЕРЕКРЫТОЕ, ReadFile, SleepEx, WaitForMultipleObjectsEx, WaitForSingleObjectEx, WriteFileEx


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz