delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/12/07/17:47:24

X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
Subject: RE: Error reported dd'ing close of end of block device with skip
Date: Wed, 7 Dec 2005 16:47:12 -0600
Message-ID: <E05F1FD208D5AA45B78B3983479ECF0856C0F9@saturn.p3corpnet.pivot3.com>
From: "Loh, Joe" <joel AT pivot3 DOT com>
To: <cygwin AT cygwin DOT com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id jB7MlMTl028209

>> On Dec  7 11:55, Loh, Joe wrote:
>> QUESTION:  
>> 
>> 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.
>
>
> Corinna

Thank you ... This will work. Any plans on supporting O_DIRECT flag in
open()?  We believe this effectively gives unbuffered I/O.  Please
correct if we are making the wrong assumption.

Again.  Thank you for the recommendation and we will wait for the next
Cygwin Kernel before porting our codes over.

--
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/


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019