Read and write should be by definition safe but:
1) Reading and writing, does it happen on the same file descriptor. If not, the open file table in your system can have multiple offsets, resulting in data read and write in an inconsistent way.
2) If you have a block of data that has to be written to your disk, do you use write in a for loop? This is not safe, because other read or write operations can be started between two write calls. Have a look at readv and writev to atomically write big data blocks.