Check input device is a terminal: Difference between revisions
m (moved Detect input coming from tty to Detect input coming from terminal: Terminal would be better, I guess. It's still a draft, so it shouldn't be too problematic.) |
(→{{header|REXX}}: added the REXX language. -- ~~~~) |
||
Line 59: | Line 59: | ||
$ true | python istty.pl |
$ true | python istty.pl |
||
Input doesn't come from tty. |
Input doesn't come from tty. |
||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX program determines if input comes from terminal or standard input*/ |
|||
if queued() then say 'input comes from the terminal.' |
|||
else say 'input comes from the (stacked) terminal queue.' |
|||
/*stick a fork in it, we're done.*/ |
|||
</lang> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
Revision as of 04:11, 25 November 2012
In this task, the job is to check whatever input filehandle comes from terminal and mention whatever input comes from it or not.
C
Use isatty()
on file descriptor to determine if it's a TTY. To get the file descriptor from a FILE*
pointer, use fileno
:
<lang c>#include <unistd.h> //for isatty()
- include <stdio.h> //for fileno()
int main(void) { puts(isatty(fileno(stdin)) ? "stdin is tty" : "stdin is not tty"); return 0; }</lang>
- Output:
$ ./a.out stdin is tty $ ./a.out < /dev/zero stdin is not tty $ echo "" | ./a.out stdin is not tty
Perl
<lang perl>use strict; use warnings; use 5.010; if (-t) {
say "Input comes from tty.";
} else {
say "Input doesn't come from tty.";
}</lang>
$ perl istty.pl Input comes from tty. $ true | perl istty.pl Input doesn't come from tty.
Perl 6
<lang perl6>say $*IN.t ?? "Input comes from tty." !! "Input doesn't come from tty.";</lang>
$ perl6 istty.p6 Input comes from tty. $ true | perl6 istty.p6 Input doesn't come from tty.
Python
<lang python>from sys import stdin if stdin.isatty():
print("Input comes from tty.")
else:
print("Input doesn't come from tty.")</lang>
$ python istty.pl Input comes from tty. $ true | python istty.pl Input doesn't come from tty.
REXX
<lang rexx>/*REXX program determines if input comes from terminal or standard input*/
if queued() then say 'input comes from the terminal.'
else say 'input comes from the (stacked) terminal queue.'
/*stick a fork in it, we're done.*/
</lang>
Tcl
Tcl automatically detects whether stdin is coming from a terminal (or a socket) and sets up the channel to have the correct type. One of the configuration options of a terminal channel is -mode (used to configure baud rates on a real serial terminal) so we simply detect whether the option is present. <lang tcl>if {[catch {fconfigure stdin -mode}]} {
puts "Input doesn't come from tty."
} else {
puts "Input comes from tty."
}</lang> Demonstrating:
$ tclsh8.5 istty.tcl Input comes from tty. $ tclsh8.5 istty.tcl </dev/null Input doesn't come from tty.