ReadFileEx |
Declare Function Api_ReadFileEx& Lib "kernel32" Alias "ReadFileEx" (ByVal hFile&, lpBuffer As Any, ByVal nNumberOfBytesToRead&, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine&) |
Declare Function ReadFileEx Lib "kernel32" Alias "ReadFileEx" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpOverlapped As OVERLAPPED, ByVal lpCompletionRoutine As Long) As Long |
|
ファイルからデータを非同期的に読み取る。 ReadFile 関数は同期と非同期の両方の操作を想定して設計されているが、ReadFileEx
関数は非同期の操作だけを想定して設計されている。ReadFileEx
関数を使うと、アプリケーションはファイルの読み取り操作を行っている間に、他の処理を実行できる。 |
|
パラメータ
らない。また、GENERIC_READ アクセス権も備えていなければならない。
かの関数が返したソケットのハンドルを指定する。 accept どちらかの関数が返したソケットのハンドルを指定する。メールスロット、名前付きパイプ、ディスクファイルに対する非同期読み取り操
作はサポートしていない。
リケーションはこのバッファを使うべきではない。 る。hFile パラメータで指定したファイルがバイトオフセットの概念をサポートしている場合、呼び出し側は読み取りを開始するバイトオフセットを
指定しなければならない。OVERLAPPED 構造体の
Offset と OffsetHigh の各メンバを設定して、バイトオフセットを指定する。 に使ってかまわない。ReadFileEx 関数は、lpCompletionRoutine パラメータが指す完了ルーチンを呼び出す(または呼び出しの指示をキ
ューに入れる)ことによって、読み取り操作の完了を通知するので、イベントのハンドルは必要ない。
値を設定するべきではありません。
い。非同期読み取り操作の進行中にスコープから外れてしまう変数を指定しないよう注意する。
の完了ルーチンが呼び出される。 時点で、呼び出し側スレッドがアラート可能な待機状態でブロックされている(その先への進行を妨害されている、つまり待機している)場 合、システムは、lpCompletionRoutine パラメータで指定した完了ルーチンを呼び出し、待機状態が完了し、ReadFileEx 関数の戻り値
は、WAIT_IO_COMPLETION になる。 システムは完了ルーチンの呼び出し命令をキューに追加し、呼び出し側スレッドがアラート可能な待機状態になるのを待つ。ファイルの終わ
り(EOF)以降を読み取ろうとすると、ReadFileEx 関数は 0 を返し、GetLastError 関数は ERROR_HANDLE_EOF
を返す。 て、いくつかの条件が「成功」しているだけで、把握するべき他の条件がエラーになっていないかどうかをチェックする。たとえば、 ReadFileEx を呼び出してバッファオーバーフローが発生した場合、ReadFileEx は成功を示す、0 以外の値(TRUE)を返す。しかし、 GetLastError は ERROR_MORE_DATA を返して、オーバーフローが発生したことを報告する。ReadFileEx 関数が成功し、待機するべ
き条件が存在しない場合、GetLastError は ERROR_SUCCESS(操作は成功して完了しました)を返す。
満たさなければならない。
断するには、 GetDiskFreeSpace 関数を呼び出す。
バイト、1,024 バイト、2,048 バイトの読み書きはできるが、335 バイト、981 バイト、7,171 バイトなどの読み書きはできない。 らない。バッファをセクタ整列させる 1 つの方法は、 関数を使ってバッファを割り当てることである。VirtualAlloc 関数が割り当てるメモリ は、システムのページサイズの整数倍のアドレスに整列されている。ページサイズとボリュームのセクタサイズは両方とも 2 のべき乗なの
で、システムのページサイズの整数倍に整列されたメモリは、ボリュームのセクタサイズの整数倍のアドレスにも整列される。
うよう指定した範囲がロック済みの領域と重なっていると、この関数は失敗する。
ERROR_INSUFFICIENT_BUFFER を返す。
読み取り操作が完了するまでは、アプリケーションは入力バッファの読み取り、書き込み、再割り当て、解放を行ってはならない。
GetLastError 関数は、ERROR_INVALID_USER_BUFFER または ERROR_NOT_ENOUGH_MEMORY
を返すことがある。
プロセスが発行した操作だけを取り消す。取り消された各 I/O 操作は、ERROR_OPERATION_ABORTED エラーを返して終了する。 どうかを尋ねるメッセージボックスを表示する。このメッセージボックスの表示を回避するには、SEM_NOOPENFILEERRORBOX を指定し
て関数を呼び出す。 WriteFileEx 関数を実行することはできない。しかし、ReadFile 関数と WriteFile 関数を使って非同期通信を行うことができる。 |