l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
September 2: Social gathering
Next Installfest:
TBD
Latest News:
Aug. 18: Discounts to "Velocity" in NY; come to tonight's "Photography" talk
Page last updated:
2001 Dec 30 17:05

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
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



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
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...2k
---------------------------------------------------------------------------



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Sunset Systems
Who graciously hosts our website & mailing lists!