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: limiting strace?, was: failure of unzip and recent cygwin1.dll


On Wed, 18 Feb 2004, Ross Boulet wrote:

> > On Wed, 18 Feb 2004, Ross Boulet wrote:
> >
> > > > On Wed, 18 Feb 2004, Ross Boulet wrote:
> > > >
>
> [...snip...]
>
> > Ok, time for "Pipes 101".  A pipe is essentially a bounded (character)
> > buffer.  The producer application fills the buffer (by writing to the
> > pipe), and the consumer application empties it (by reading from the
> > pipe). If the buffer is full, the producer application blocks (inside
> > the write) until room is available.  If there's no data to read, the
> > consumer application blocks.  The amount of pipe data stored in memory
> > is determined only by the size of the buffer.  For unbuffered pipes,
> > the amount is 1 character.
> >
> > Once the data is read from the buffer, its further fate is up to the
> > consumer application.  Some applications (like grep) act as filters,
> > and require only enough memory for the current line.  Some (like sort)
> > will read the whole input and store it in memory before processing it
> > (or use temporary files internally, but these have nothing to do with
> > the pipe itself).  If you're interested in the behavior of any
> > particular application, I suggest you look at the sources of the
> > corresponding package (available for *all* Cygwin packages).
> >       Igor
> > P.S. FYI, less doesn't necessarily read all of the input, and has
> > options limiting the amount of allocated memory.
>
> Thanks for the enlightenment Igor,
>
> I looked at the options for less and see what you mean.  The -b and -B
> options can be used to limit how much memory less consumes.
>
> A couple more questions - you mentioned buffered and unbuffered pipes.  What
> determines whether the pipe is buffered or unbuffered?  Is cygwin managing
> its own pipes, or passing them off to Windoze to manage?
>
> Thanks,
> Ross

Ross,

First off, data can actually be buffered in more than one place.  For
example, the stdio library can do its own buffering before the data even
gets to the pipe.

Pipe buffering properties can certainly be specified in the API calls that
create pipes.  I'm not sure whether they can be changed once the pipe is
created (probably yes, but you should look at the API documentation to
make sure).

As far as I know, Cygwin doesn't have its own pipe implementation, and
uses the underlying Windows one (at least on NT-based systems, I'm not
sure about Win9x).  Cygwin does, however, wrap the underlying Windows API
by functions providing POSIX semantics, so it may well be that it does
some manipulation before passing the parameters or data off to Windows.
For technical questions like these, looking at the Cygwin sources is your
best bet.  If you aren't certain about what a particular Windows call
does, MSDN is the place to go.
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"I have since come to realize that being between your mentor and his route
to the bathroom is a major career booster."  -- Patrick Naughton

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


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