
Ben Rudiak-Gould
Marcin 'Qrczak' Kowalczyk wrote:
Ben Rudiak-Gould
writes: fileRead can be implemented in terms of OS primitives,
Only if they already support reading from a fixed offset (like pread). I'm not sure if we can rely on something like this being always available, or whether it should be emulated using lseek which is safe only as long as we are the only process using the given open file.
First of all, I don't think any OS shares file pointers between processes. Otherwise it would be practically impossible to safely use an inherited filehandle via any API. Different threads using the same filehandle do share a file pointer (which is a major nuisance in my experience, because of the lack of an atomic seek- read/write), but a Posix fork duplicates the file pointer along with all other state. I can't believe I'm wrong about this, but someone please correct me if I am.
This may be what you wrote, but let me still put it: dup()-ed filehandles share a common file position. Handles straight from open() have independent file positions. fork() duplicates filehandles and the child inherits those => the child process shares the file position with its parent. Threads or processes doesn't make the difference; dup() or open() does. This is my interpretation of the docs, I didn't test it... :) -- Feri.