Check output device is a terminal

From Rosetta Code
Revision as of 07:56, 28 March 2013 by rosettacode>Blue Prawn (→‎{{header|OCaml}}: lighter syntax)

In this task, the job is to check whatever output filehandle exits to the terminal and mention whatever output goes to 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()

  1. include <stdio.h> // for fileno()

int main() {

   puts(isatty(fileno(stdout))
         ? "stdout is tty"
         : "stdout is not tty");
   return 0;

}</lang>

Output:
$ ./a.out
stdout is tty

$ ./a.out > tmp
$ cat tmp
stdout is not tty

$ ./a.out | cat
stdout is not tty

OCaml

<lang ocaml>let () =

 print_endline (
   if Unix.isatty Unix.stdout
   then "Output goes to tty."
   else "Output doesn't go to tty."
 )</lang>

Testing in interpreted mode:

$ ocaml unix.cma istty.ml
Output goes to tty.

$ ocaml unix.cma istty.ml > tmp
$ cat tmp
Output doesn't go to tty.

$ ocaml unix.cma istty.ml | cat
Output doesn't go to tty.