Async file IO on Linux is a bit odd, although it is gradually getting better. It only applies to unbuffered IO (I think still). So you have to use a thread to read or write. Windows has a more usable version. There is a Unix standard API but it is just implemented with threads normally anyway.