Обнаружить в C, если вывод на терминал - PullRequest
21 голосов
/ 30 июня 2009

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

Определение типа выходного потока сценария оболочки

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

Ответы [ 2 ]

41 голосов
/ 30 июня 2009

Использование isatty():

$ man isatty
ISATTY(3)                  Linux Programmer's 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
5 голосов
/ 30 июня 2009
if (isatty (1))
    fprintf (stdout, "Outputting to a terminal.");
else
    fprintf (stdout, "Not outputting to a terminal.");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...