#pragma section-numbers off #pragma disable-camelcase = SDL_RWread = Use this function to read from a data source. <> == Syntax == {{{#!highlight cpp size_t SDL_RWread(struct SDL_RWops* context, void* ptr, size_t size, size_t maxnum) }}} == Function Parameters == ||'''context'''||a pointer to an [[SDL_RWops]] structure|| ||'''ptr'''||a pointer to a buffer to read data into|| ||'''size'''||the size of each object to read, in bytes|| ||'''maxnum'''||the maximum number of objects to be read|| == Return Value == Returns the number of objects read, or 0 at error or end of file; call [[SDL_GetError]]() for more information. == Code Examples == {{{#!highlight cpp 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); } }}} Read a complete file in memory (assuming size can be detected) (from [[https://gitlab.com/wikibooks-opengl/modern-tutorials/blob/master/common-sdl2/shader_utils.cpp|OpenGL WikiBook]]): {{{#!highlight cpp 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; } }}} == Remarks == This function reads up to '''maxnum''' objects each of size '''size''' from the data source to the area pointed at by '''ptr'''. This function may read less objects than requested. It will return zero when there has been an error or the data stream is completely read. SDL_RWread() is actually a macro that calls the [[SDL_RWops]]'s '''read''' method appropriately, to simplify application development. '''More Examples''' {{{#! highlight cpp Uint32 buffer[10]; SDL_RWread(rwop, buffer, sizeof(Uint32), 10); }}} This will read 40 bytes of data, and put it into 'buffer', which is intended to hold 32-bit integers. Each Uint32 is 4 bytes, or 32-bits. {{{#! highlight cpp Uint64 buffer[10]; SDL_RWread(rwop, buffer, sizeof(Uint64), 10); }}} This will read 80 bytes of data, and place them into 'buffer', which is now designed for 64-bit integers (Uint64 values). Each Uint64 (long) is 8 bytes, and we are reading 10 of them (as shown by buffer[10] when we make it). == Related Functions == .[[SDL_RWclose]] .[[SDL_RWFromConstMem]] .[[SDL_RWFromFile]] .[[SDL_RWFromFP]] .[[SDL_RWFromMem]] .[[SDL_RWseek]] .[[SDL_RWwrite]] ---- [[CategoryAPI]], [[CategoryIO]]