size_t SDL_RWread(struct SDL_RWops* context, void* ptr, size_t size, size_t maxnum)
context | SDL_RWopsへのポインタ |
ptr | 読み込んだデータを書き込むポインタ |
size | 1つのオブジェクトのバイト数 |
maxnum | 読み込む最大のオブジェクト数 |
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メソッドを呼ぶマクロだった.
32bit整数が保存されていることを想定している. 40byteのデータを読み込み, bufferに書き込む.
それぞれのUint32は4byte, 32bitである.
Uint32 buffer[10];
SDL_RWread(rwop, buffer, sizeof(Uint32), 10);
64bit整数が保存されていることを想定している. 80byteのデータを読み込み, bufferに書き込む.
それぞれのUint64は8byteで, 10個の値を読み込む.
Uint64 buffer[10];
SDL_RWread(rwop, buffer, sizeof(Uint64), 10);