Check output device is a terminal
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()
- 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.