grep < fifo fails
Houder
houder@xs4all.nl
Wed Oct 10 09:53:00 GMT 2018
On Mon, 08 Oct 2018 10:24:01, Houder wrote:
...
> > > > On Wed, 3 Oct 2018 15:37:14, Ole Tange wrote:
> > > > > This works:
> > > > >
> > > > > $ mkfifo fifo
> > > > > $ echo > fifo & grep . fifo
> > > > > [1] 10232
> > > > > [1]+ Done echo > fifo
> > > > >
> > > > > But this fails:
> > > > >
> > > > > $ echo > fifo & grep . < fifo
> > > > > [1] 11756
> > > > > grep: (standard input): Invalid argument
> > > > > [1]+ Done echo > fifo
...
> grep fails on Cygwin because lseek() on Cygwin fails to recognize
> that it is applied to a FIFO. As result of that, it returns EINVAL
> in errno, where it should return ESPIPE.
[snip]
> The solution would be either to correct Cygwin's executive or to
> insert a Cygwin-specific kludge in grep (in reset() ).
Right.
64-@@ echo aaa > fifo & grep . < fifo
[1] 3956
aaa
[2]+ Done echo aaa > fifo
The following rough patch to the Cygwin executive ... uhm, Cygwin DLL,
makes the above work.
winsup/cygwin/fhandler.h:
class fhandler_fifo: public fhandler_base_overlapped
{
...
// Henri
off_t lseek (off_t, int)
{
set_errno (ESPIPE);
return -1;
}
...
};
(I cheated; I did a copy/paste of what is already present in fhandler.h)
Regards,
Henri
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list