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

# SDL_RWread

データ元から読み込む

## 構文

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

## 引数

context | SDL_RWopsへのポインタ
ptr | 読み込んだデータを書き込むポインタ
size | 1つのオブジェクトのバイト数
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 2.0.10以前は, 実際には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 2.0.10以降

## 関連項目(関数)

SDL_RWclose
SDL_RWFromConstMem
SDL_RWFromFile
SDL_RWFromFP
SDL_RWFromMem
SDL_RWseek
SDL_RWwrite

## SDL Wikiへのリンク

SDL_RWread - SDL Wiki