Re: [vox-tech] How to check for data coming in STDIN
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [vox-tech] How to check for data coming in STDIN
Ah, I get it
----- Original Message -----
From: <jdnewmil@dcn.davis.ca.us>
To: <vox-tech@franz.mother.com>
Sent: Thursday, June 21, 2001 10:42 AM
Subject: Re: [vox-tech] How to check for data coming in STDIN
> On Thu, 21 Jun 2001, Jay Strauss wrote:
>
> > Actually, I don't get it (well I get it enough to use in my code,
but...)
> >
> > -t Filehandle is opened to a tty.
> >
> > What does this mean?
>
> If the filehandle is a tty, it returns true.
>
> > I suppose I don't understand what a "tty" is.
>
> An interactive device. That is, it is used for both input and output,
> even though the filehandle being tested may only correspond to one of
> those directions.
>
> > I'd
> > think "-t" would return a 0 if I wasn't piping something in on STDIN, vs
> > returning a 1 when no STDIN
>
> STDIN is always open, unless you close it. The only question is what it is
> connected to... an interactive terminal, or a pipe/file/other device.
> "-t" returns 1 for the former, or 0 otherwise.
>
> >
> > Jay
> >
> >
> > ----- Original Message -----
> > From: "Micah Cowan" <micah@cowanbox.com>
> > To: <vox-tech@franz.mother.com>
> > Sent: Wednesday, June 20, 2001 6:30 PM
> > Subject: Re: [vox-tech] How to check for data coming in STDIN
> >
> >
> > > On Wed, Jun 20, 2001 at 06:06:39PM -0500, Jay Strauss wrote:
> > > > In perl, if I have a pgm:
> > > >
> > > > while (<>) {
> > > > print "this is the line: $_";
> > > > }
> > > >
> > > > normally I'd invoke the pgm like:
> > > >
> > > > echo "repeat this line" | ./pgm
> > > >
> > > > But if I accidentally invoke it like:
> > > >
> > > > ./pgm
> > > >
> > > > How would I prevent the while loop from running (i.e. pseudocode):
> > > >
> > > > while (<>) if (exists <STDIN>) {
> > > > print "$_";
> > > > }
> > >
> > > Well, that won't work - and the while (<>) actually does that for you
> > > automatically anyway.
> > >
> > > It won't work though because STDIN /does/ exist. It's the interactive
> > > tty by default (when it's not getting a redirected input).
> > >
> > > You can exploit /that/ fact, though, by doing this (tested):
> > >
> > > -------
> > > #!/usr/bin/perl -w
> > >
> > > die "Hey! I was expecting a redirected STDIN!\n" if (-t);
> > > print "this is the line: $_" while (<>);
> > > -------
> > >
> > > The -t test evaluates to true if it's argument is a tty - if no arg is
> > > given, STDIN is assumed.
> > >
> > > Micah
> >
> >
> > _________________________________________________________
> > Do You Yahoo!?
> > Get your free @yahoo.com address at http://mail.yahoo.com
> >
>
> --------------------------------------------------------------------------
-
> Jeff Newmiller The ..... ..... Go
Live...
> DCN:<jdnewmil@dcn.davis.ca.us> Basics: ##.#. ##.#. Live
Go...
> Live: OO#.. Dead: OO#.. Playing
> Research Engineer (Solar/Batteries O.O#. #.O#. with
> AAAAACNBQAABAAAAJEFAAAAAAAAkQUAAAAAAACRBQAAAAAAAPcPAAAAAAAA
>
cQYAAAAAAADSAgAAAAAAANICAAAAAAAAfgQAAAAAAAAAAAAAAAAAAH4EAAAPAQAAfgQAAAAAAABx
> BgAAAAAAAHEGAAAA
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
|