Is there a simple way to treat /dev/sdN as a &mut [u8] in Rust?
In particular, I would like to be able to read/write to [start, end) in O(end - start) + O(1) time? The O(1) for seek, and the O(end - start) for the actual data read/write.
I've had a good experience with the memmap2 crate. But note that UB occurs if the file is modified while being mapped, since the compiler expects to have exclusive access to an &mut [u8].
Ah, I've just found a feature of memmap2 that might be useful for this case: MmapRaw, which lets you access a file as a *mut u8 (convertible to a *mut [u8]). To access it safely, you can use read_volatile and write_volatile, although data races can still occur if another thread or program writes to the same location.