You do not respect all parameters of read, i.e. size and offset. Certain programs or commands read only chunks of files at a time. This means that they expect to be able to read x bytes (size) starting at position y bytes (offset). So your primary mistake in your code snipped is that you just return the entire file for every read operation.
A fix could start with something trivial like returning file_content[offset:(offset+size)]. When I say "start", you have to keep in mind that you must also raise proper errors if the offset or size (for the given offset) passed into your read function are out of bounds.