Подтвердить что ты не робот

Обнаружение в C, если вывод на терминал

Я пишу программу C для OS X и Linux, и я хочу настроить выход на основе того, идет ли он к терминалу. Я знаю, что мы рассмотрели, как это сделать в оболочке script, например. здесь:

Обнаружение типа выходного потока оболочки script

Но как это сделать в программе на C?

4b9b3361

Ответ 1

Используйте isatty():

$ man isatty
ISATTY(3)                  Linux Programmer Manual                 ISATTY(3)

NAME
       isatty - does this descriptor refer to a terminal

SYNOPSIS
       #include <unistd.h>

       int isatty(int desc);

DESCRIPTION
       returns  1  if  desc is an open file descriptor connected to a terminal
       and 0 otherwise.

Поскольку stdout всегда является файловым дескриптором 1, вы можете сделать:

if(isatty(1))
    // stdout is a terminal

Ответ 2

if (isatty (1))
    fprintf (stdout, "Outputting to a terminal.");
else
    fprintf (stdout, "Not outputting to a terminal.");