非同期ファイルI/Oをラップしたクラスです。
[詳解]
#include "nn/nlib/threading/AsyncFileIo.h"
|
| AsyncFileIo () noexcept |
| コンストラクタです。
|
|
| ~AsyncFileIo () noexcept |
| デストラクタです。ファイルがオープンされている場合にはクローズします。
|
|
errno_t | Init () noexcept |
| 初期化を行います。 [詳解]
|
|
NLIB_CHECK_RESULT errno_t | Open (const char *path, int flags, int mode) noexcept |
| ファイルをオープンします。 [詳解]
|
|
NLIB_CHECK_RESULT errno_t | FdOpen (nlib_fd fd) noexcept |
| nlib_fd を利用してファイルをオープンします。 [詳解]
|
|
nlib_fd | GetFd () const noexcept |
| nlib_fd を取得します。 [詳解]
|
|
errno_t | Close () noexcept |
| ファイルをクローズします。 [詳解]
|
|
errno_t | Read (Future< size_t > *future, void *buf, size_t nbytes, nlib_offset ofs, AsyncFileIoService *ioservice) noexcept |
| 非同期ファイル読み込みを開始します。 [詳解]
|
|
errno_t | Read (size_t *read_bytes, void *buf, size_t nbytes, nlib_offset ofs, AsyncFileIoService *ioservice) noexcept |
| ファイル読み込みを行います。内部で非同期読み込みをウェイトしています。 [詳解]
|
|
errno_t | Write (Future< size_t > *future, const void *buf, size_t nbytes, nlib_offset ofs, AsyncFileIoService *ioservice) noexcept |
| 非同期ファイル書き込みを開始します。 [詳解]
|
|
errno_t | Write (size_t *write_bytes, const void *buf, size_t nbytes, nlib_offset ofs, AsyncFileIoService *ioservice) noexcept |
| ファイル書き込みを行います。内部で非同期書き込みをウェイトしています。 [詳解]
|
|
errno_t | Cancel (AsyncFileIoService *ioservice) noexcept |
| オープンしたファイルに対して行われている実行中の非同期ファイルI/Oをキャンセルします。 [詳解]
|
|
非同期ファイルI/Oをラップしたクラスです。
- 説明
- 非同期ファイルI/Oの結果をFutureを使って通知することで扱いやすくしたクラスです。 また、別スレッドで同期I/Oを発行するようにして非同期に見えるように実装されている場合もあります。
- 現在はwin32とlinuxにおいてネイティブの非同期I/Oを利用して実装されています。 linuxにおいては
SIGUSR1
が利用されていて、AsyncFileIoService::Init()
においてハンドラを設定しています。
- 以下に非同期I/O読み込みのコーディング例を示します。
.....
AsyncFileIoService ioservice;
if (ioservice.Init() != 0) { エラー }
.....
AsyncFileIo io;
if (io.Init() != 0) { エラー }
if (io.Open("file.bin", AsyncFileIo::ASYNCFILEIO_READ) != 0) { エラー }
Future<size_t> readResult;
if (io.Read(&readResult, buf, bufsize, 0, &ioservice) != 0) { エラー }
.... 読込中に他の処理を行う
if (readResult.Get(&readsize) != 0) { エラー }
AsyncFileIo.h の 15 行目に定義があります。
§ Cancel()
オープンしたファイルに対して行われている実行中の非同期ファイルI/Oをキャンセルします。
- 引数
-
[in] | ioservice | 非同期ファイルI/O管理オブジェクトへのポインタ |
- 戻り値
-
0 | 成功 |
ENOTSUP | システムがこの機能をサポートしていません |
EBADF | ファイルがオープンされていません。 |
§ Close()
nn::nlib::threading::AsyncFileIo::Close |
( |
| ) |
|
|
noexcept |
ファイルをクローズします。
- 戻り値
-
0 | クローズに成功しました。 |
EBADF | ファイルがオープンされていません。 |
§ FdOpen()
nn::nlib::threading::AsyncFileIo::FdOpen |
( |
nlib_fd |
fd | ) |
|
|
noexcept |
nlib_fd
を利用してファイルをオープンします。
- 引数
-
- 戻り値
-
0 | 成功しました。 |
EALREADY | 既にファイルがオープンされています。 |
§ GetFd()
nn::nlib::threading::AsyncFileIo::GetFd |
( |
| ) |
const |
|
inlinenoexcept |
§ HasNativeAsyncFileIo()
nn::nlib::threading::AsyncFileIo::HasNativeAsyncFileIo |
( |
| ) |
|
|
staticnoexcept |
システムの非同期ファイルI/Oを利用して実装されているかどうかをチェックします。
- 戻り値
- 非同期ファイルI/Oを利用して実装されていればtrue
§ Init()
nn::nlib::threading::AsyncFileIo::Init |
( |
| ) |
|
|
noexcept |
§ Open()
nn::nlib::threading::AsyncFileIo::Open |
( |
const char * |
path, |
|
|
int |
flags, |
|
|
int |
mode |
|
) |
| |
|
noexcept |
ファイルをオープンします。
- 引数
-
- 戻り値
-
0 | オープンに成功しました。 |
EIO | オープンに失敗しました。 |
§ Read() [1/2]
非同期ファイル読み込みを開始します。
- 引数
-
[in,out] | future | 非同期ファイル読み込みの結果が格納されるFutureへのポインタ |
[in,out] | buf | データが読み込まれるバッファへのポインタ |
[in] | nbytes | バッファ・サイズ |
[in] | ofs | ファイルに対する読み込み開始オフセット |
[in] | ioservice | 非同期ファイルI/O管理オブジェクトへのポインタ |
- 戻り値
-
0 | 非同期ファイル読み込みが開始しました。 |
EINVAL | 引数が不正です。 |
ENOMEM | メモリの確保に失敗しました。 |
- 説明
- バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。
§ Read() [2/2]
ファイル読み込みを行います。内部で非同期読み込みをウェイトしています。
- 引数
-
[out] | read_bytes | 読み込んだバイト数 |
[in,out] | buf | データが読み込まれるバッファへのポインタ |
[in] | nbytes | バッファ・サイズ |
[in] | ofs | ファイルに対する読み込み開始オフセット |
[in] | ioservice | 非同期ファイルI/O管理オブジェクトへのポインタ |
- 戻り値
-
0 | ファイル読み込みが成功しました。 |
EINVAL | 引数が不正です。 |
ENOMEM | メモリの確保に失敗しました。 |
- 説明
- バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。
§ Write() [1/2]
非同期ファイル書き込みを開始します。
- 引数
-
[in,out] | future | 非同期ファイル書き込みの結果が格納されるFutureへのポインタ |
[in] | buf | 書き込みデータへのポインタ |
[in] | nbytes | バッファ・サイズ |
[in] | ofs | ファイルに対する書き込み開始オフセット |
[in] | ioservice | 非同期ファイルI/O管理オブジェクトへのポインタ |
- 戻り値
-
0 | 非同期ファイル書き込みが開始しました。 |
EINVAL | 引数が不正です。 |
ENOMEM | メモリの確保に失敗しました。 |
- 説明
- バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。
§ Write() [2/2]
nn::nlib::threading::AsyncFileIo::Write |
( |
size_t * |
write_bytes, |
|
|
const void * |
buf, |
|
|
size_t |
nbytes, |
|
|
nlib_offset |
ofs, |
|
|
AsyncFileIoService * |
ioservice |
|
) |
| |
|
noexcept |
ファイル書き込みを行います。内部で非同期書き込みをウェイトしています。
- 引数
-
[out] | write_bytes | 書き込んだバイト数 |
[in] | buf | 書き込みデータへのポインタ |
[in] | nbytes | バッファ・サイズ |
[in] | ofs | ファイルに対する書き込み開始オフセット |
[in] | ioservice | 非同期ファイルI/O管理オブジェクトへのポインタ |
- 戻り値
-
0 | 非同期ファイル書き込みが開始しました。 |
EINVAL | 引数が不正です。 |
ENOMEM | メモリの確保に失敗しました。 |
- 説明
- バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。
このクラス詳解は次のファイルから抽出されました: