Ah, yes, "the file offset is not changed".. I forgot about that.. Thanks for correcting me :)
rlc On Thu, 26 Jun 2003, Brian Dessent wrote: > Ronald Landheer-Cieslak wrote: > > > > pread and pwrite are not in Cygwin (or at least are not exported by > > cygwin1.dll). They are hardly the most portable functions in the world. I > > suggest you write a wrapper. Something like: > > > > <UNTESTED CODE> > > ssize_t pread(int fd, void *buf, size_t count, off_t offset) > > { > > if (lseek(fd, offset, SEEK_SET) == (off_t)-1) > > { > > return(-1); > > } > > return(read(fd, buf, count)); > > } > > > > and > > ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset) > > { > > if (lseek(fd, offset, SEEK_SET) == (off_t)-1) > > { > > return(-1); > > } > > return(write(fd, buf, count)); > > } > > </UNTESTED CODE> > > You'll want to save the original file position and restore it after the > operation, e.g. > > ssize_t > pread(int fd, void *p, size_t n, off_t off) > { > off_t ooff; > int oerrno; > > if ((ooff = lseek(fd, off, SEEK_SET)) == -1) > return -1; > > n = read(fd, p, n); > > oerrno = errno; > lseek(fd, ooff, SEEK_SET); > errno = oerrno; > > return n; > } > > ssize_t > pwrite(int fd, const void *p, size_t n, off_t off) > { > off_t ooff; > int oerrno; > > if ((ooff = lseek(fd, off, SEEK_SET)) == -1) > return -1; > > n = write(fd, p, n); > > oerrno = errno; > lseek(fd, ooff, SEEK_SET); > errno = oerrno; > > return n; > } > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Problem reports: http://cygwin.com/problems.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/