nlib
nn::nlib::threading::AsyncFileIo クラスfinal

非同期ファイルI/Oをラップしたクラスです。 [詳解]

#include "nn/nlib/threading/AsyncFileIo.h"

公開メンバ関数

 AsyncFileIo () noexcept
 コンストラクタです。
 
 ~AsyncFileIo () noexcept
 デストラクタです。ファイルがオープンされている場合にはクローズします。
 
errno_t Init () noexcept
 初期化を行います。 [詳解]
 
errno_t Open (const char *path, int flags, int mode) noexcept
 ファイルをオープンします。 [詳解]
 
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をキャンセルします。 [詳解]
 

静的公開メンバ関数

static bool HasNativeAsyncFileIo () 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::kAsyncFileIoRead) != 0) { エラー }
Future<size_t> readResult;
// バッファやオフセットはアライメントが確保されている必要があるかもしれません。
if (io.Read(&readResult, buf, bufsize, 0, &ioservice) != 0) { エラー }
.... 読込中に他の処理を行う
if (readResult.Get(&readsize) != 0) { エラー }
// bufにreadSizeバイトのデータが読み込まれている

AsyncFileIo.h28 行目に定義があります。

関数詳解

◆ Cancel()

nn::nlib::threading::AsyncFileIo::Cancel ( AsyncFileIoService ioservice)
noexcept

オープンしたファイルに対して行われている実行中の非同期ファイル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を利用してファイルをオープンします。

引数
[in]fdオープンされたnlib_fd
戻り値
0成功しました。
EALREADY既にファイルがオープンされています。

◆ GetFd()

nn::nlib::threading::AsyncFileIo::GetFd ( ) const
inlinenoexcept

nlib_fdを取得します。

戻り値
オブジェクトが保持する nlib_fdの値

AsyncFileIo.h46 行目に定義があります。

◆ HasNativeAsyncFileIo()

nn::nlib::threading::AsyncFileIo::HasNativeAsyncFileIo ( )
staticnoexcept

システムの非同期ファイルI/Oを利用して実装されているかどうかをチェックします。

戻り値
非同期ファイルI/Oを利用して実装されていればtrue

◆ Init()

nn::nlib::threading::AsyncFileIo::Init ( )
noexcept

初期化を行います。

戻り値
0ならば成功

◆ Open()

nn::nlib::threading::AsyncFileIo::Open ( const char *  path,
int  flags,
int  mode 
)
noexcept

ファイルをオープンします。

引数
[in]pathオープンするファイルへのパス
[in]flagsnlib_fd_open()に渡すオープン用のフラグ
[in]modenlib_fd_open()に渡すアクセス許可引数(省略した場合は0644)
戻り値
0オープンに成功しました。
EIOオープンに失敗しました。

◆ Read() [1/2]

nn::nlib::threading::AsyncFileIo::Read ( Future< size_t > *  future,
void *  buf,
size_t  nbytes,
nlib_offset  ofs,
AsyncFileIoService ioservice 
)
noexcept

非同期ファイル読み込みを開始します。

引数
[in,out]future非同期ファイル読み込みの結果が格納されるFutureへのポインタ
[in,out]bufデータが読み込まれるバッファへのポインタ
[in]nbytesバッファ・サイズ
[in]ofsファイルに対する読み込み開始オフセット
[in]ioservice非同期ファイルI/O管理オブジェクトへのポインタ
戻り値
0非同期ファイル読み込みが開始しました。
EINVAL引数が不正です。
ENOMEMメモリの確保に失敗しました。
説明
バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。

◆ Read() [2/2]

nn::nlib::threading::AsyncFileIo::Read ( size_t *  read_bytes,
void *  buf,
size_t  nbytes,
nlib_offset  ofs,
AsyncFileIoService ioservice 
)
noexcept

ファイル読み込みを行います。内部で非同期読み込みをウェイトしています。

引数
[out]read_bytes読み込んだバイト数
[in,out]bufデータが読み込まれるバッファへのポインタ
[in]nbytesバッファ・サイズ
[in]ofsファイルに対する読み込み開始オフセット
[in]ioservice非同期ファイルI/O管理オブジェクトへのポインタ
戻り値
0ファイル読み込みが成功しました。
EINVAL引数が不正です。
ENOMEMメモリの確保に失敗しました。
説明
バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。

◆ Write() [1/2]

nn::nlib::threading::AsyncFileIo::Write ( Future< size_t > *  future,
const void *  buf,
size_t  nbytes,
nlib_offset  ofs,
AsyncFileIoService ioservice 
)
noexcept

非同期ファイル書き込みを開始します。

引数
[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メモリの確保に失敗しました。
説明
バッファ領域のアライメントやオフセットのアライメントにシステムによる制限がある場合があります。

このクラス詳解は次のファイルから抽出されました: