Read from a data source.
size_t SDL_RWread(SDL_RWops *context, void *ptr, size_t size);
context | a pointer to an SDL_RWops structure |
ptr | a pointer to a buffer to read data into |
size | the number of bytes to read from the data source. |
Returns the number of bytes read, or 0 on end of file or other error.
This function reads up size
bytes from the data source to the area pointed at by ptr
. This function may read less bytes than requested. It will return zero when the data stream is completely read, or -1 on error. For streams that support non-blocking operation, if nothing was read because it would require blocking, this function returns -2 to distinguish that this is not an error or end-of-file, and the caller can try again later.
SDL_RWread() is actually a function wrapper that calls the SDL_RWops's read
method appropriately, to simplify application development.
It is an error to specify a negative size
, but this parameter is signed so you definitely cannot overflow the return value on a successful run with enormous amounts of data.
This function is available since SDL 3.0.0.
"test.bin","r");
SDL_RWops *rw = SDL_RWFromFile(if (rw != NULL) {
extern Uint8 buf[256];
sizeof (buf), 1);
SDL_RWread(rw, buf,
SDL_RWclose(rw); }
Read a complete file in memory (assuming size can be detected) (from OpenGL WikiBook):
char* file_read(const char* filename) {
"rb");
SDL_RWops *rw = SDL_RWFromFile(filename, if (rw == NULL) return NULL;
Sint64 res_size = SDL_RWsize(rw);char* res = (char*)malloc(res_size + 1);
0, nb_read = 1;
Sint64 nb_read_total = char* buf = res;
while (nb_read_total < res_size && nb_read != 0) {
1, (res_size - nb_read_total));
nb_read = SDL_RWread(rw, buf,
nb_read_total += nb_read;
buf += nb_read;
}
SDL_RWclose(rw);if (nb_read_total != res_size) {
free(res);return NULL;
}
'\0';
res[nb_read_total] = return res;
}