目次 - API(機能別) - ファイル入出力 - SDL_RWread

SDL_RWread

データ元から読み込む

構文

size_t SDL_RWread(struct SDL_RWops* context, void* ptr, size_t size, size_t maxnum)

引数

contextSDL_RWopsへのポインタ
ptr読み込んだデータを書き込むポインタ
size1つのオブジェクトのバイト数
maxnum読み込む最大のオブジェクト数

戻り値

読み込んだオブジェクトの数を戻す. 失敗またはファイルの終端のとき0を戻す. SDL_GetError()で詳細を知ることができる.

サンプルコード

SDL_RWops *rw = SDL_RWFromFile("test.bin","r");
if (rw != NULL) {
    extern Uint8 buf[256];
    SDL_RWread(rw, buf, sizeof (buf), 1);
    SDL_RWclose(rw);
}

ファイルを読み込む完全なコードは次の通りである. (サイズが得られると仮定している) (OpenGL WikiBookより):

char* file_read(const char* filename) {
        SDL_RWops *rw = SDL_RWFromFile(filename, "rb");
        if (rw == NULL) return NULL;

        Sint64 res_size = SDL_RWsize(rw);
        char* res = (char*)malloc(res_size + 1);

        Sint64 nb_read_total = 0, nb_read = 1;
        char* buf = res;
        while (nb_read_total < res_size && nb_read != 0) {
                nb_read = SDL_RWread(rw, buf, 1, (res_size - nb_read_total));
                nb_read_total += nb_read;
                buf += nb_read;
        }
        SDL_RWclose(rw);
        if (nb_read_total != res_size) {
                free(res);
                return NULL;
        }

        res[nb_read_total] = '\0';
        return res;
}

詳細

それぞれsizeバイトの最大num個のオブジェクトを読み込みptrポインタへ書き込む. 読み込むオブジェクトの数は要求の数より少ない場合がある. エラーが発生した, またはデータストリームを完全に読み込んだ場合は0を戻す.

SDL_RWread()は実際にはSDL_RWopsのreadメソッドを呼ぶマクロである.

Uint32 buffer[10];
SDL_RWread(rwop, buffer, sizeof(Uint32), 10);
32bit整数が保存されていることを想定している. 40byteのデータを読み込み, bufferに書き込む. それぞれのUint32は4byte, 32bitである.

Uint64 buffer[10];
SDL_RWread(rwop, buffer, sizeof(Uint64), 10);
64bit整数が保存されていることを想定している. 80byteのデータを読み込み, bufferに書き込む. それぞれのUint64は8byteで, 10個の値を読み込む.

関連項目(関数)

SDL_RWclose
SDL_RWFromConstMem
SDL_RWFromFile
SDL_RWFromFP
SDL_RWFromMem
SDL_RWseek
SDL_RWwrite

SDL Wikiへのリンク

SDL_RWread - SDL Wiki