Le 26/07/2017 à 22:00, Christopher Clements a écrit :

Wouldn't this work? (no error checking of course XD)

   off_t lseek(int fd, off_t offset, int whence);
   ssize_t write(int fd, const void *buf, size_t count);
ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset) {
       lseek(fd, offset, SEEK_SET);
       return write(fd, buf, count);
   }

I looked at the source code of Musl libc. Actually both write() and pwrite() are simple wrappers to... a general-purpose system-call wrapper. The second simply has one more argument. I didn't dig further. At first glance at least, it means that file offsets are managed in the kernel or VFS but they can be bypassed by pwrite(). AFAIR pwrite() doesn't change the "current" file offset; it simply ignores and bypasses it, which isn't exactly what your example does.

But the discussion was about low-level vs high-level programming. Using unistd's read() and write() in C means you are dealing with low level issues; otherwise why would you bother with the complexity it introduces - not only you need to deal with buffering but also with retries when interrupted by signals.

    Didier


_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to