How do I tell if STDIN is a PIPE?
Boyd Roberts
boyd at prl.dec.com
Tue Jun 4 01:08:51 AEST 1991
In article <1991Jun3.141144.23620 at leland.Stanford.EDU>, dkeisen at leland.Stanford.EDU (Dave Eisen) writes:
>
> >> In article <1991May26.172328.713 at arizona.edu>, jjr at ace.ece.arizona.edu (Jeffrey J. Rodriguez) writes:
> >
> > Try:
> > fstat(0, &s);
> > if(s.st_mode & S_IFIFO)
> > ...
>
> This doesn't work everywhere, in particular, it doesn't work on the machine I
> am posting from. s.st_mode & S_IFREG (which, by the way, is what you should
> be testing for) is 0 when stdin is a pipe. This doesn't seem to be consistently
> done across Unices.
>
You don't test for anything that way. This:
if ((sb.st_mode & S_IFMT) == S_IFIFO)
is the way it's done (unless you have those gory POSIX macros). But,
of course they're not `portable'; except to POSIX.
Boyd Roberts boyd at prl.dec.com
``When the going gets wierd, the weird turn pro...''
More information about the Comp.unix.questions
mailing list