Check output device is a terminal: Difference between revisions

From Rosetta Code
m ({{draft task}} Category:Terminal control)
m (moved Detect output to terminal to Detect output going to terminal: same pattern than "Detect input coming from terminal")
(No difference)

Revision as of 08:00, 28 March 2013

Check output device is a terminal is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

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.