This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Error reported dd'ing close of end of block device with skip

On Dec  7 19:35, Corinna Vinschen wrote:
> On Dec  7 11:55, Loh, Joe wrote:
> > 
> > Is there a way in Cygwin to do a read of a block device using "C" that
> > does not do a read-ahead?  We needed to develop an application that will
> > issue the exact transfer size to the target device as requested.
> > Looking at the strace, it appears that read() less than 61440-bytes gets
> > translated to reading 61440 bytes into buffer and then a subset of that
> > read is returned to the caller.
> There's a non-portable (only Cygwin) way to set the buffer size after
> opening a device:
>   #include <cygwin/rdevio.h>
>   struct rdop rd;
>   fd = open ("dev/sda", ...);
>   rd.rd_op = RDSETBLK;
>   rd.rd_parm = 0;	/* Unbuffered reading */
>   rd.rd_parm = 1;	/* Unbuffered reading */
>   rd.rd_parm = n;	/* Buffered reading with buffer size n */
>   ioctl (fd, RDIOCDOP, &rd);
> Note that the ioctl fails if the buffer already contains data, so ioctl
> should be called before the first read.  Also note that in unbuffered
> mode the usual Windows blocking rule applies, the length given to read
> must be a multiple of 512.
> Sigh, it seems that I introduced a bug into this ioctl also not long ago.
> I fixed this in CVS.  Recent code will probably not work very well when
> setting it to unbuffered mode.  Please wait for the next developers
> snapshot.

I just added another requirement, that rd.rd_parm must be either 0, 1,
or a multiple of 512.  Other sizes for buffers don't make much sense.


Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat, Inc.

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]